c fopen fread 錯誤


真的被,讀取一個txt文本,結果一個早上都沒搞好

程序如下:

能看出哪里有問題么,輸出字符串,得到的結果后面有“屯”或則 “燙”,單個字符輸出來也有,為何,搜啊搜,改txt的內容,依舊不行

最后 改fopen 的r 改為rb就可以了,神奇了,明明txt就是ascii碼文件啊,為什么要改成rb啊,b是二進制的意思啊

再搜,論壇里面高人說了:

二進制打開之后可以使用fgets,ascii打開之后也可以使用fwrite。
區別就是
“只不過回車符有點不一樣。一個是0x0a,一個是0x0d 0x0a。具體哪個是哪個我也記不得了。”

二進制方式打開
1、會把所有字符都讀出來,包括:回車,換行,'\0',直到文件結束,才停止讀;
2、可以完全讀出所有類型的文件,包括:exe,dll,ocx......
ascii方式打開,當遇到以下字符:
1、回車,換行,'\0',則當前一行文本的停止讀的地方,直到本行結束,都不能讀出,接着讀下一行;
2、只能正確讀出文本文件。

要求兩個對應:
1  是操作函數與打開方式對應,如 使用fread/fwrite 則要使用2進制方式操作文件,
   如果使用的是 文本方式(ascii)可能會出錯 ...
2  文件的讀 和寫方式對應,一個文件寫的時候是 2進制方式的,那么讀取的時候也用2進制方式,否則可能獲取的數據會有差別,差別的來源就在於 兩種操作方式的差別:一個直接作為2進制流(2進制方式)操作, 一個是以字符流方式操作(ascii) ...

這哪里是二進制打開和文本打開的區別,明明是dos和unix回車符號的區別。

我來總結下:其實fopen打開文件 什么  “rb”  “rt”  “r” 這些其實不分文本文件和二進制文件的,但是你使用二進制打開文件,你就不要用fputs  fgets 這樣ascii的操作函數,你得用fread  fwrite

同樣的,你用ascii碼方式打開文件,那么你就不要用fread,我就是犯了這樣的錯誤

mark::

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM