Ошибка сегментации в C при использовании isdigit () и argc - PullRequest
0 голосов
/ 27 сентября 2018

У меня возникла следующая проблема: Ошибка сегментации (ядро сброшено).

Я осмотрел другие вопросы по 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 (argv [i]) == 0)".

РЕДАКТИРОВАТЬ:

Здесьэто решение, спасибо всем!

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

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Вы передаете string, который на самом деле char * к isdigit.Вам нужно передать первый символ строки вместо

isdigit(*argv[i][0])
0 голосов
/ 27 сентября 2018

isdigit ожидает int, вы даете ему строку (на самом деле это группа символов с нулевым символом в конце)

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

Хотя поведение в этом списке указано как «неопределенное»на самом деле, я не совсем уверен, почему вы получите от него segfault.

...