Я пишу программу c как часть моей задачи по курсу операционной системы. Я обнаружил, что у меня есть ошибка, после «удаления» моего кода я обнаружил, что источником проблемы является функция fgets. Файл "numbers.txt" содержит 3 строки пар чисел, мне нужно прочитать каждую пару и что-то сделать. Мне также нужно убедиться, что в каждой строке есть только 1 пара чисел (не допускается 3 числа в строке), поэтому мой код работает для первых 2 строк, но в третьей строке отображается сообщение «Ошибка сегментации (дамп ядра)».
Я думал, что это потому, что файл имел только 3 строки, поэтому я попытался добавить больше строк, но все еще работали только первые 2. Вот код:
void newlineRemover(char *array) {
for (int i = 0; i < strlen(array); i++)
if (array[i] == '\n')
array[i] = '\0';
}
int main(int argc, char **argv) {
char *line = (char*) malloc(100 * sizeof(char));
char *token;
int numbers[2], number, counter = 1;
puts("please enter the numbers file name:");
fgets(line, MAXCHAR, stdin); // read from stdin
newlineRemover(line);
FILE *fp = fopen(line, "r");
if (fp == NULL) {
perror("fopen(): ");
return EXIT_FAILURE;
}
while (fgets(line, 50, fp) != NULL) {
token = strtok(line, " ");
while (token != NULL) {
number = atoi(token);
if (counter != 3 && (number != 0 || strcmp(token, "0") == 0)) {
numbers[counter - 1] = number;
} else {
fprintf(stderr, "illegal input at line %d",
line_count);
exit(EXIT_FAILURE);
}
counter++;
token = strtok(NULL, " ");
}
counter = 0;
}
fclose(fp);
return EXIT_SUCCESS;
}
Код работает до конца второй, пока l oop работает, затем, когда он снова проверяет fgets != NULL
, я получаю ошибку.