我正在尝试检查第三个命令行是数字,所以我做了
int n;
if (!isdigit(argv[3]))
{
fprintf(stderr, "n MUST be a number");
return 4;
} else
{
n = atoi(argv[3]);
printf("%in",n);
}
但是我得到了
Segmentation fault
但是,如果我只是做过
int n = atoi(argv[3]);
它可以正常工作,我真的不明白为什么
deidei在评论中是正确的。看看ARGV的方式:
int main (int argc, char *argv[])
这是一系列指针,每个指针都指向C字符串,即一个字符数组。因此,argv[3]
是指向第三个参数的第一个字符的指针。(数组从0开始,但是ARGV [0]是您程序的名称)。
isDigit()被称为:
int isdigit(int c);
因此,它期望有一个INT,而不是指针。您需要取消您发送给isDigit的指针,例如:
isdigit(*argv[3])
(请记住,在C中,char是int的特殊情况,因此编译器可以使用。)
来自Man Isdigit: int isdigit(int c)
。但是argv[3]
是char*
(地址为char),因此存在不匹配。进一步
该参数的值必须表示为无符号字符或eof的值。
作为 argv[3]
可能无法表示为UCHAR,行为是不确定的,您可能会违反分割。