Можно ли спутать EOF с обычным байтовым значением при использовании fgetc?
Мы часто используемfgetc
как это:
int c;
while ((c = fgetc(file)) != EOF)
{
// do stuff
}
Теоретически, если байт в файле имеет значениеEOF
, этот код глючит - он рано нарушает цикл и не может обработать весь файл. Возможна ли такая ситуация?
Насколько я понимаю,fgetc
внутренне отбрасывает прочитанный байт из файла вunsigned char
а затемint
и возвращает его. Это будет работать, если диапазонint
больше, чем уunsigned char
.
Что произойдет, если это не так (вероятно, тогдаsizeof(int)=1
)?
fgetc
прочитать достоверные данные, равныеEOF
из файла иногда?Изменит ли он данные, прочитанные из файла, чтобы избежать единственного значенияEOF
?Будетfgetc
быть невыполненной функцией?БудетEOF
быть другого типа, какlong
?Я мог бы сделать мой код надежным путем дополнительной проверки:
int c;
for (;;)
{
c = fgetc(file);
if (feof(file))
break;
// do stuff
}
Это необходимо, если я хочу максимальной мобильности?