Использование ferror с обычным файлом в c - PullRequest
0 голосов
/ 22 января 2019

В этом связанном вопросе Как использовать feof и ferror для fgets (мини-оболочка в C) , ответы для моей проблемы не совсем ясны.

Я пытаюсь сделать следующее: я хочу прочитать все символы из простого текстового файла на моем диске. Это не ссылка, файл устройства, сокет и т. Д., А обычный текстовый файл. После того, как я прочитал все символы, я хочу посмотреть, все ли получилось. Теперь я вижу, что в моих сборках Debug все идет успешно, но в моих сборках Release ferror() всегда указывает на ошибку. В то время как сборка Debug возвращает 0 в конце. В обоих случаях я вижу, что содержимое файла было получено в отладчике.

my_function(File* f) {
    int c;
    while ((c = fgetc(f)) != EOF) {
        char character = (char) c;
        // store character in a dynamic growing buffer
    }
    // append '0' byte to buffer (to terminate the string).

    if (ferror(f)) {
        // return error
        return 1;
    }
    return 0; // no error.
}

Обоснование наличия уже открытого файла в качестве аргумента функции состоит в том, чтобы сделать его относительно простым для чтения из файла без необходимости использования зависимой от платформы кодировки. Это внутри частной части моей библиотеки, публичные функции обрабатывают случай, который f == NULL. Нужно ли сначала вызывать clearerr(file), поскольку бит ошибки не инициализируется в сборках выпуска?

...