2012-03-28 26 views
2

我正在讀「Carter的PC彙編語言」,我在第32頁的腳註中看到了這個短語,這使我很困惑!
如果我們假設文件末尾沒有EOF(正如本書所說)是一個正確的語句,那麼我們如何確定文件的結尾?
並且它還產生了另一個問題:fseek是否使用EOF在文件中來回移動?常見誤解:文件末尾有一個EOF字符

+5

所有文件都有大小。如果你從第一個字節讀到最後一個(如文件大小所示),你已經到達文件的末尾。沒有特殊的_character_標記文件的結尾(考慮嘗試讀取二進制數據,文件結束字節與其他任何字節的區別如何?)。 – 2012-03-28 12:27:47

+0

混淆可能是EOF本身只是「文件結束」的簡稱,因此它可能意味着很多東西:ASCII字符0x1A,打開的文件讀取器已達到結尾的條件,函數eof ()'或它的結果,非字符常量'EOF'等。 – 2012-03-28 12:34:49

+0

@JoachimPileborg只是爲了好玩,你應該在中間創建一個帶有\ x1A的文本文件,然後從命令行鍵入它。 – 2012-03-28 12:40:01

回答

6

PC =>^Z:EOF

在奧爾德PC-天

的CTRL-Z在對EOF一個文件中的信號。

UNIX和其他現代系統下:閱讀stat.st_size落後之後,EOF發出信號

4

http://www.drpaulcarter.com/cs/common-c-errors.php

這是什麼價值? EOF對學生常見的誤解是 文件末尾有一個特殊的EOF字符。文件末尾不存在特殊的 字符。 EOF是由函數返回的整數錯誤代碼 。

+1

那隻告訴我這些人不知道^ Z。 – 2012-03-28 12:43:16

+0

非常有用的鏈接 – Rsh 2012-03-28 15:19:05

0

EOF沒有存儲在文件中。當沒有更多數據要讀取或發生輸入錯誤時,EOF(通常定義爲-1)由操作系統返回。所以一旦你到達文件末尾,你必須必須命中EOF。

我對你書中聲明的猜測是"EOF is not necessarily be at the end of file but also possible to have it somewhere in the middle of a file".這對預期的輸入錯誤是正確的。

2

那麼,EOF不存儲在文件的末尾,而不是charEOF是一條錯誤消息,讀取函數在沒有更多數據要讀取時返回。這是getchar回報int的原因 - 它可能會返回一個char轉化爲int,或intEOF(這是無效的char,因此,如果你得到它,你可以肯定,你通過文件的末尾)。

+0

這是IMO最有啓發性的答案。 – Wildcard 2016-11-23 05:36:41

0

在C代碼的情況下,EOF只是一個表示給定輸入流沒有更多數據可用的指示。是否與文件中的特殊EOF字符相對應,是底層文件或I/O系統的功能。

相關問題