c fopen fread 錯誤

來源:互聯網
上載者:User

標籤: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 錯誤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.