"Как указано выше, обнаружив конец файла, функция getc() возвращает константу EOF. Однако это не самый лучший способ распознавания конца файла. Во-первых, операционная система может работать как с текстовыми, так и с бинарными файлами. Если файл открыт для бинарного ввода, из него может быть считано целое число, равное константе EOF. Следовательно, конец файла, распознаваемый функцией getc(), может не совпадать с реальным концом файла."
Я, наверное, чего-то не понимаю. Как можно считать из файла байт со значением EOF?
Про знаковое расширение у signed char я знаю, но если оно срабатывает на байтах, читаемых из файла, то это тяжелая проблема билиотеки, подлежащая срочному лечению.
Так о чём это он?
Я, наверное, чего-то не понимаю. Как можно считать из файла байт со значением EOF?
Про знаковое расширение у signed char я знаю, но если оно срабатывает на байтах, читаемых из файла, то это тяжелая проблема билиотеки, подлежащая срочному лечению.
Так о чём это он?
Tags:
no subject
no subject
no subject
:)
И он в самом деле бывает в файлах.
В текстовых - в конце. В бинарных - где угодно и сколько угодно.
no subject
Хотя, если придираться, то это getc() может вернуть EOF, прочитав из файла ^Z.
А "считать из файла целое число, равное константе EOF" таки нельзя.
no subject
no subject
The fgetc() function may mark the st_atime field of the file associated with stream for update. The st_atime field will be marked for update by the first successful execution of fgetc(), fgets(), fgetwc(), fgetws(), fread(), fscanf(), getc(), getchar(), gets() or scanf() using stream that returns data not supplied by a prior call to ungetc() or ungetwc().
from http://www.livejournal.com/users/dil/49773.html?mode=reply
Возможно, кстати, что он о том некорректном использовании, когда пишут
char c;
c= getc();
Тьфу
http://www.opengroup.org/onlinepubs/007908799/xsh/fgetc.html
no subject
Вообще, если читать по байту - вполне себе можно прочитать и еоф. ну, байт, целое число - какая разница :))
А посмотреть stdio.h ???
int getc(FILE *stream);
Именно int, а не char!
Соответственно, прочитать байт 0x1A (что было актуально в DOS) можно, но обрабатывать его именно как EOF никто не заставляет - точно так же, как /bin/sh завершает работу не при чтении символа ^D (0x04), а при получении SIGHUP
Re: А посмотреть stdio.h ???
В приведенном отрывке, конечно, написана ерунда. Не знаю уж, кто виноват, автор или переводчик.