Я получаю ошибку сегментации - PullRequest
0 голосов
/ 20 сентября 2019

По какой-то причине я получаю ошибку сегментации, я написал эту программу, которая вычисляет дни между двумя датами, и хотел, чтобы "dd-mm-yyyy" был представлен в виде строки, а "dd2-mm2-yyyy2"также должен быть представлен в виде строки, я думал, что смогу решить это таким образом, но я могу получить ошибку сегментации, кто-то может мне помочь?что я делаю не так?

1 Ответ

1 голос
/ 20 сентября 2019

Это кажется неверным.argv [1] - это ваша строка "day", длина которой составляет 1 или 2 символа, а вы индексируете символы 3 и 4.

char monstr[3];
monstr[0]= argv [1][3];
monstr[1]=argv [1][4];
monstr[2] = '\0';

Вероятно, это должно быть:

char monstr[3];
monstr[0]= argv [2][0];
monstr[1]=argv [2][1];
monstr[2] = '\0';

То же самое с некоторыми другими строками.

Но, тем не менее, я основываю это на том, как вы, кажется, анализируете ввод.Если вы хотите, чтобы ваш ввод был дд-мм-гггг, значит, вы не правильно вводите данные.Вместо этого вы должны сделать что-то вроде этого:

int dd, mm, yyyy;
sscanf(argv[1], "%d-%d-%d", &dd, &mm, &yyyy);

И то же самое с другой строкой.И в этом случае предыдущую вещь, которую я исправил, не нужно исправлять.

Как общий совет: причина ошибок сегментации заключается в том, что вы обращаетесь к памяти, которую вы не можетедоступ.Распространенной причиной этого является выход за пределы массива или использование недопустимых указателей.В вашем случае, это похоже на один из этих двух, и это происходит из-за неправильного использования argv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...