標籤:blog http os 使用 ar 檔案 資料 2014 sp
真的被,讀取一個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::
c fopen fread 錯誤