C 为什么在使用isdigit函数时出现分段错误?

C 为什么在使用isdigit函数时出现分段错误?,c,cs50,C,Cs50,我在执行以下程序时遇到分段错误。不过,当我将变量argv更改为char*argv并生成后续指针时,代码似乎部分工作 int main(int argc, string argv[] ){ if(argc == 1) { printf("Error"); } else if (argc ==2 ) { if(isdigit(argv[1])) { int key = atoi (a

我在执行以下程序时遇到分段错误。不过,当我将变量argv更改为char*argv并生成后续指针时,代码似乎部分工作

int main(int argc, string argv[] ){

    if(argc == 1) {
        printf("Error");
    }
    else if (argc ==2 )
    {
        if(isdigit(argv[1]))
        {
        int key = atoi (argv[1]);
        printf("Success");

        }
    }
    else  {

       printf("Error");

    }

}

isdigit()
需要一个字符参数,但您正在传递一个指针。您可能想循环使用
argv[1]
中的所有字符,并在调用
atoi()

之前确保它们都是数字,因为您使用了
cs50
标记,我们可能会假设
string
char*
,但您的代码没有显示任何包含,因此它不是真正确定的。最好不要在问题中使用非标准类型。
printf(“错误”)总是有问题的。错误属于stderr<代码>fprintf(标准,“错误”\n)是首选。请注意,
atoi
的行为在溢出/下溢时未定义。您可能应该(几乎可以肯定,“几乎”只是出于礼貌)使用
strtol