[問題] 以byte讀檔時讀到EOF byte

看板C_and_CPP作者 (Crysis)時間12年前 (2012/06/20 11:33), 編輯推噓9(905)
留言14則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC+Linux 問題(Question): 文字檔內有個全形的冒號:, 存成unicode big endian (0xFF1A) 使用getc並判斷!=EOF才印出來, 發現FF會被當作EOF 餵入的資料(Input): 檔案bytes長這樣 FE FF FF 1A ^^^^^ unicode 預期的正確結果(Expected Output): 印出FF 1A 錯誤結果(Wrong Output): 印出1A 程式碼(Code):(請善用置底文網頁, 記得排版) fseek(fptr, 2, SEEK_SET); char ch; while( (ch=getc(fptr))!=EOF ){ printf("%x ",ch); } 補充說明(Supplement): 在我的實驗中看來只要檔案有出現FF的byte, 就會被當作EOF 請問如何才能印出預期的結果, 或是說如何準確地判斷是'真的'碰到檔案結尾? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.186.181

06/20 11:37, , 1F
maybe ch=getc(fptr))!=255
06/20 11:37, 1F

06/20 11:44, , 2F
getc是逆著讀取?
06/20 11:44, 2F

06/20 11:51, , 3F
getwc
06/20 11:51, 3F

06/20 11:53, , 4F
不知逆著讀是指? 不是讀個byte後指標指向下個byte嗎
06/20 11:53, 4F

06/20 12:28, , 5F
getc傳回值是int不是char, type搞錯所以才會判斷錯誤
06/20 12:28, 5F

06/20 12:28, , 6F
樓上正解
06/20 12:28, 6F

06/20 12:57, , 7F
可以請Astral大稍做解釋嗎@@
06/20 12:57, 7F

06/20 13:17, , 8F
EOF是-1, 0xFF是255 這兩個值本來不一樣
06/20 13:17, 8F

06/20 13:20, , 9F
你用char去接它, 前面一堆bit被切掉所以就相等了
06/20 13:20, 9F

06/20 13:43, , 10F
謝謝^^ 瞭解了
06/20 13:43, 10F

06/20 19:51, , 11F
等一下... EOF 不一定是 -1
06/20 19:51, 11F

06/20 19:51, , 12F
而且因為標準的缺陷這方法在極端狀況下還是有可能炸掉
06/20 19:51, 12F

06/20 19:56, , 13F
我知道EOF只要是負數都行 這裡直接講-1比較省事XD
06/20 19:56, 13F

06/21 11:38, , 14F
感謝樓上各位
06/21 11:38, 14F
文章代碼(AID): #1FuKHx7F (C_and_CPP)