November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Monday, October 11th, 2004 12:17 pm
"Как указано выше, обнаружив конец файла, функция getc() возвращает константу EOF. Однако это не самый лучший способ распознавания конца файла. Во-первых, операционная система может работать как с текстовыми, так и с бинарными файлами. Если файл открыт для бинарного ввода, из него может быть считано целое число, равное константе EOF. Следовательно, конец файла, распознаваемый функцией getc(), может не совпадать с реальным концом файла."

Я, наверное, чего-то не понимаю. Как можно считать из файла байт со значением EOF?
Про знаковое расширение у signed char я знаю, но если оно срабатывает на байтах, читаемых из файла, то это тяжелая проблема билиотеки, подлежащая срочному лечению.
Так о чём это он?
Monday, October 11th, 2004 01:26 am (UTC)
Может, о EOL?
Monday, October 11th, 2004 01:48 am (UTC)
Не, это точно про EOF - там дальше расписано про то, что во-вторых, getc() может вернуть EOF и в случае ошибки, а не только конца файла, и потому надо еще применять feof().
Monday, October 11th, 2004 01:53 am (UTC)
EOF - это такой Ctrl-Z...
:)
И он в самом деле бывает в файлах.
В текстовых - в конце. В бинарных - где угодно и сколько угодно.
Monday, October 11th, 2004 02:01 am (UTC)
О, точно. Спасибо. А я уж про CP/M и забыл давно :)

Хотя, если придираться, то это getc() может вернуть EOF, прочитав из файла ^Z.
А "считать из файла целое число, равное константе EOF" таки нельзя.
Monday, October 11th, 2004 02:03 am (UTC)
Тьфу. И ведь в книжке говорится как раз о бинарном файле, а не о текстовом. Ошибка переводчика?
Monday, October 11th, 2004 02:34 am (UTC)
Вау. Отвечаешь на собственные комменты - любишь поговорить с умным человеком? :)

Вообще, если читать по байту - вполне себе можно прочитать и еоф. ну, байт, целое число - какая разница :))