Как отличить символ EOF от фактического конца файла? - PullRequest
5 голосов
/ 01 февраля 2012

При чтении файла я понимаю, что последний предоставленный символ - EOF . Теперь, что происходит, когда у меня есть символ EOF в этом файле?

Как отличить «реальный» конец файла от символа EOF?

Ответы [ 3 ]

10 голосов
/ 01 февраля 2012

Я решил переместить мои комментарии в ответ.

Вы не можете иметь "EOF символ" в вашем файле, потому что такой вещи нет.Базовая файловая система знает, сколько байтов находится в файле;он не полагается на содержимое файла, чтобы узнать, где находится конец.

Функции C, которые вы используете, возвращают EOF (-1) , но они не были прочитаны изфайл .Это просто способ, которым функция сообщает вам, что вы достигли конца.И поскольку -1 не является допустимым символом в любом наборе символов, здесь нет путаницы.

4 голосов
/ 01 февраля 2012

Вам нужен контекст для этого вопроса. В Windows существует устаревшая концепция DOS настоящего «персонажа EOF» - Ctrl-Z. На самом деле невозможно отличить «настоящего» от «поддельного»; файл со встроенным Ctrl-Z будет содержать некоторые скрытые скрытые данные с точки зрения программы, которая фактически ищет Ctrl-Z в качестве символа конца файла. Не пытайтесь больше писать такой код - это не обязательно.

В переносимом C API и в UNIX 32-битный -1 используется для обозначения конца файла, который не может быть действительным 8 или 16-битным символом, поэтому легко заметить разницу.

1 голос
/ 01 февраля 2012

Если вы говорите о C, EOF - это -1, что не является символом (следовательно, нет путаницы).

...