Чтение ФАЙЛА и использование fscanf входит в бесконечный цикл - PullRequest
0 голосов
/ 19 апреля 2011

Вот функция, которой дается файл для сканирования:

void scan(FILE *file) {

    while (true) {
        char s1[1001];
        int result = fscanf(file, "%10s", s1);
        printf("%d\n", result);
        s1[1001] = '\0';
        if (result == EOF) break;
    }


}

Я использую fopen для файла перед передачей его этой функции.Он выводит -1 в бесконечном цикле, но не прерывается.Как получилось?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

При форсировании нулевого терминатора в s1 возникла ошибка, равная единице, это:

s1[1001] = '\0';

запускается после конца s1, должно быть:

s1[1000] = '\0';

Когда вы объявляете массив в C как char s1[X];, X - это количество элементов в массиве, а поскольку массивы C индексируются, начиная с нуля, последний элемент - s1[X-1].

Это может быть случайным изменением значения result между проверкой printf и result == EOF.

0 голосов
/ 19 апреля 2011

Я думаю, это зависит от того, что является s1.

Убедитесь, что это char s1[ appropriate_size ], а не char * s1.

Отлично работает в моем случае: Test

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