2014-05-13 24 views
1

我最近發現使用fgetc(),fscanf()(C中的通用函數來掃描字符)讀取SUB字符(ASCII code 26)會使其解釋爲錯誤並返回EOF。我想知道是否有任何方法來檢測SUB字符,以便我可以區分文件的「真實」結尾和明顯的結尾。我們如何檢測文件中的SUB字符?

注意:我現在的結論是,使用掃描中的錯誤檢測文件的末尾,因爲SUB字符用於表示任務看起來不可能的錯誤。但是,由於記事本似乎正確地閱讀,我期待使用一些我不熟悉的C語言技術。

+0

1)確保將'fgetc()'的結果保存爲'int'。 2)SUB又名Ctrl^Z,由_some_文件文件用來指示文件中最後一個'char'。許多文本文件不使用該文件,而是隻是沒有更多的數據可供讀取。 3)當'fgetc()'或'fscanf()'返回'int',而不是'char',EOF時,實際結束文件是文件結束條件集。 – chux

+0

@chux(第3點)fgetc()和fscanf()的原型返回int。那麼他們如何返回char ?.據我所知,文件的錯誤和真實結束都使得這兩個函數都返回-1。 – Frog

+0

同意這兩個函數返回'int'。在'int'中結果是_saved_很重要。你可以找到_many_ SO弱編碼的例子,像'char ch = fgetc(stdin);如果(ch == EOF)...'。這兩個函數都會在文件的錯誤/實際結束時返回'EOF',而不一定是'-1'。 C規範不會將'EOF'定義爲'-1',但確實將其定義爲負數。 – chux

回答

2

以二進制模式打開文件。

...fopen("filename", "rb")... 

不要忘記,庫代碼不再以二進制模式把「換行」。如果該文件有"\r\n"對結束行,則在讀取文件時將同時獲得'\r''\n'

相關問題