Почему этот код C -кода багги?
-
22-09-2019 - |
Вопрос
На Другой вопрос, Джерри Гроб указано на следующее:
Это (вероятно) не очень связано с вашим вопросом, но
while (!feof(fileptr)){
в значительной степени гарантированная ошибка.
Я подумал, что начну отдельный вопрос, так как этот комментарий несколько не по теме. Может ли кто -нибудь объяснить мне это? Это была первая программа, которую я писал в прямой C раньше.
Решение
Причина этого утверждения в том, что feof
все еще (изначально) ложь, когда был достигнут конец файла - он становится верным только после первой неудачной попытки прочитать после конца файла.
Следовательно
char mychar;
while(!feof(fileptr))
{
fread(&mychar, sizeof(char), 1, fileptr);
fprintf(stderr, "The char is '%c'.\n", mychar);
}
Слишком много обработать один.
Правильным способом является проверка возвращаемого значения fread
(или любая функция, которую вы используете для чтения) или, в качестве альтернативы, чтобы вызвать feof
после функция, которая выполняет чтение. Например:
char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
fprintf(stderr, "The char is '%c'.\n", mychar);
Другие советы
Google находит это: http://www.drpaulcarter.com/cs/common-c-errors.php#4.2
В нем говорится: «Автор еще не видел, чтобы кто -либо из студентов использовал функцию FeOF () правильно!»
Подводя итог, файл c функционирует как fread
а также fwrite
В любом случае вернуть значения статуса, которые вы u003Cblink>не должен игнорироватьu003C/blink>. Анкет Проверка значения feof
это один из тех, кто зажигает стабильную дверь после того, как лошадь уже сбежала.
Список часто задаваемых данных C имеет отвечать наряду с ответами на многие другие подобные вопросы:
В C конец файла обозначается только после того, как подпрограмма ввода пыталась прочитать и не удалась.