Не выходит в условие else if. При кзапуске вообще без аргумента пишет sigmentation fault. В чем ошибка?

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

 int check_key(string argv);

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

 int key = check_key(argv[1]);

    if(argc != 2)
    {
        printf("Usage: ./ceaser key\n");
    }
    else if(isdigit(key))
    {
        printf("Succes\n");
    }
    else
    {
    printf("Usage: ./ceaser key\n");
    }



}

int check_key(string argv)
{
    int j = atoi(argv);

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

}


Ответы (2 шт):

Автор решения: Sergey

В функции main попробуйте вот так:

int key;

    if(argc != 2)
    {
        printf("Usage: ./ceaser key\n");
    }
    else 
    {
        key = check_key(argv[1]);
        if(isdigit(key))
            printf("Succes\n");
        else
            printf("Error argv[1] = '%s'\n", argv[1]);
    }

Это чисто по синтаксису. Но семантика этой программы осталась для меня загадочной...

→ Ссылка
Автор решения: Nikolas

В функции main вы вызываете функцию check_key в которую подаёте первый аргумент программы (кстати, нулевой аргумент не пустой). В случае если вы не зададите аргументы программы, то в функцию atoi попадёт нулевой указатель. Там то и проявится segfault.

А насчёт захода в else if. Не совсем понятен смысл вашей программы, но могу подсказать, что функция isdigit() в качестве аргумента принимает символ. Она проверяет является ли этот символ символом цифры. Например, '0' или '2'.

→ Ссылка