使用isdigit()和argc时C中的分段错误

时间:2018-09-27 15:04:44

标签: c cs50

我遇到以下问题:分段错误(核心已转储)。

我环顾了StackOverflow上的其他问题,但没有找到正确的答案。这是我的代码:

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main(int argc, string argv[])
{
if (argc != 2)
{
    printf("missing command-line argument\n");
    return 1;
}

for (int i = 0; i < argc; i++)
{
    printf("Made it inside");
    if (isdigit(argv[i]) == 0)
    {
        return 1;
    }
}
string plain_text = get_string("plaintext: ");
int key = atoi(argv[1]); //function to convert a string to int. 


for (int i = 0, n = strlen(plain_text); i < n; i++)
{
    int c = (int) plain_text[i];
    c += key;
    printf("%c", c);
}
printf("\n");

return 0;

}

错误来自“ if(isdigit(argdigit [iv])== 0)”。

编辑:

这是解决方案,谢谢大家!

 for (int i = 0; i < strlen(argv[1]); i++)
{
    if (isdigit(argv[1][i]) == 0)
    {
        return 1;
    }
}

2 个答案:

答案 0 :(得分:5)

您正在向string传递实际上是char *的{​​{1}}。您需要改为传递字符串的第一个字符

isdigit

答案 1 :(得分:3)

isdigit需要一个int,您要给它一个字符串(实际上是一个以null结尾的字符组)

http://pubs.opengroup.org/onlinepubs/009696699/functions/isdigit.html

尽管在这种情况下该行为被列为“未定义”,但实际上我不确定为什么会从中得到段错误。