Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的分词_C_For Loop_Multidimensional Array_Segmentation Fault_C Strings - Fatal编程技术网

c语言中的分词

c语言中的分词,c,for-loop,multidimensional-array,segmentation-fault,c-strings,C,For Loop,Multidimensional Array,Segmentation Fault,C Strings,希望确认字符串是一个数字,但在下面出现分段错误-编译时没有错误: for (int i=0; argv[i] != '\0'; i++) { if (isdigit(argv[i]) != 1) { printf("FAIL %s\n", argv[1]); } else { printf("PASS %s\n", argv[1]); } } 看来你的意思是 int success = argv[1][0] !=

希望确认字符串是一个数字,但在下面出现分段错误-编译时没有错误:

for (int i=0; argv[i] != '\0'; i++)
{
    if (isdigit(argv[i]) != 1)
    {
        printf("FAIL %s\n", argv[1]);
    }
    else
    {
        printf("PASS %s\n", argv[1]);
    }
}

看来你的意思是

int success = argv[1][0] != '\0';

for ( size_t i = 0; success && argv[1][i] != '\0'; i++ )
{
    success = isdigit( ( unsigned char )argv[1][i] ) != 0;
}

if ( !success )
{
    printf( "FAIL %s\n", argv[1] );
}
else
{
    printf( "PASS %s\n", argv[1] );
}

也就是说,您希望检查第一个命令行参数是否表示一个数字。

您的意思似乎是

int success = argv[1][0] != '\0';

for ( size_t i = 0; success && argv[1][i] != '\0'; i++ )
{
    success = isdigit( ( unsigned char )argv[1][i] ) != 0;
}

if ( !success )
{
    printf( "FAIL %s\n", argv[1] );
}
else
{
    printf( "PASS %s\n", argv[1] );
}

也就是说,您要检查第一个命令行参数是否表示一个数字。

isdigit()
采用单字符参数,而不是字符串。此外,在测试真理时,切勿使用“==1”或“!=1”。除0以外的所有值都为真。我发现很难相信在执行
isdigit(argv[I])
时没有收到警告。
isXXXX()
函数族在结果为
true
时返回非零值。因此,如果
isdigit()
返回
2
表示某个数字已通过,则测试将失败,因为您将只接受
1
isdigit()
接受一个单字符参数,而不是字符串。此外,在测试真理时,切勿使用“==1”或“!=1”。除0以外的所有值都为真。我发现很难相信在执行
isdigit(argv[I])
时没有收到警告。
isXXXX()
函数族在结果为
true
时返回非零值。因此,如果
isdigit()
返回
2
表示某个数字已通过,则测试将失败,因为您将只接受
1
。奇怪的是,如果字符串正确,您希望将其打印N次。。。不过,我只能猜测。谢谢弗拉德-这正是我想要的。“尺寸”有什么作用?为什么我需要做“argv[1][I]”而不仅仅是“argv[I]”呢?我在C上只花了几周的时间,试图了解我在做什么inputting@JackHartleysize_t是用于存储对象大小或索引的无符号整数类型。argv[i]是指向指定参数的字符串的指针。如果你想扫描字符串,你必须使用第二个索引。奇怪的是,如果字符串是正确的,你会想打印N次。。。不过,我只能猜测。谢谢弗拉德-这正是我想要的。“尺寸”有什么作用?为什么我需要做“argv[1][I]”而不仅仅是“argv[I]”呢?我在C上只花了几周的时间,试图了解我在做什么inputting@JackHartleysize_t是用于存储对象大小或索引的无符号整数类型。argv[i]是指向指定参数的字符串的指针。如果要扫描字符串,必须使用第二个索引。