ошибка сегментации после fgets - программа c - PullRequest
0 голосов
/ 13 апреля 2020

Я пишу программу 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, я получаю ошибку.

...