В этом связанном вопросе Как использовать 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)
, поскольку бит ошибки не инициализируется в сборках выпуска?