Почему я получаю ошибку сегментации с такими ограничениями, которые есть в моих циклах while? - PullRequest
0 голосов
/ 15 октября 2018

В настоящее время я работаю над кодом, который должен уметь читать строку из ранее существовавшего файла строка за строкой, разделяя строки в строке с помощью strep ().В настоящее время он успешно читает и печатает каждую строку (всего 47).Однако после того, как он читает и печатает последнюю строку, он сталкивается с ошибкой сегментации.Насколько я понимаю, это означает, что код пытается получить доступ к чему-то, что не существует (например, элемент массива 8 в "int array [5];". Я не понимаю, в какой момент он пытается получить доступ к такому элементу.

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

int main(int argc, char *argv[]) {
        FILE *fp = fopen(argv[1], "r");
        int i = 0, j;
        char line[47][500];

        fgets(line[i], 500, fp);
        printf("%d", i);
        printf("%s\n", line[i]);
        i++;

        while (!feof(fp)) {
                while (fgets(line[i], 500, fp) != NULL && i < 47) {
                        printf("%d", i);
                        printf("%s\n", line[i]);
                        i++;
                }
        }

После этого есть некоторый код, но именно здесь встречается ошибка.

1 Ответ

0 голосов
/ 15 октября 2018

Потому что fgets(line[i], 500, fp) != NULL оценивается до i < 47.Это выведет за границы, когда i = 47.

Попробуйте изменить порядок в вашем цикле eval:

while (i < 47 && fgets(line[i], 500, fp) != NULL)
...