Yas*_*imi 0 c segmentation-fault
我正在尝试检查第三个命令行是否是数字,所以我做了
int n;
if (!isdigit(argv[3]))
{
fprintf(stderr, "n MUST be a number");
return 4;
} else
{
n = atoi(argv[3]);
printf("%i\n",n);
}
Run Code Online (Sandbox Code Playgroud)
但我得到
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是这样做
int n = atoi(argv[3]);
Run Code Online (Sandbox Code Playgroud)
它工作得很好,我真的不明白为什么
小智 5
评论中的DeiDei是对的。看看 argv 的声明方式:
int main (int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
它是一个指针数组,其中每个指针指向一个C 字符串,即一个字符数组。argv[3]指向第三个参数的第一个字符的指针也是如此。(数组从 0 开始,但 argv[0] 是程序的名称)。
isdigit() 声明如下:
int isdigit(int c);
Run Code Online (Sandbox Code Playgroud)
所以它期待一个int,而不是一个指针。您需要取消引用您发送给 isdigit 的指针,如下所示:
isdigit(*argv[3])
Run Code Online (Sandbox Code Playgroud)
(请记住,在 C 中,char 是 int 的特例,因此编译器可以接受。)