真的被,讀取一個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::