C- iSdigit函数上的分割故障



我正在尝试检查第三个命令行是数字,所以我做了

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,行为是不确定的,您可能会违反分割。

相关内容

  • 没有找到相关文章

最新更新