fread讀取模式的選擇

2021-07-13 20:04:20 字數 718 閱讀 4381

今天在寫資源管理器的時候,載入音訊檔案,發現檔案頭的格式對不上,剛開始以為是讀頭的邏輯出錯了,在vs下用debug的memory和用hex格式對比發現,最終是發現記憶體沒有載入全只是載入了一部分的原因,是讀到了0x1a

google了一下,發現自己開啟檔案的方式不對,我使用的是:

1

file* file =fopen( path,"r");

而正確的應該是:

1

file* file =fopen( path,"rb");

為什麼是這樣子呢,因為如果用"r"模式開啟,字元是有意義的,只要是讀到0x1a時,fread就認為是結束。為什麼是0x1a,而不是別的,寫個小例子輸出一下ctrl + z的ascii碼值發現,它的ascii碼值就是26在windows上(linux是掛起任務)。

但你以"rb"讀到文字,系統io只會認為它是文字而非別的東西。

推薦乙個hex檢視器,當資源和記憶體資料不符的時候,hex格式的檢視顯得比較重要了。notepad++的乙個外掛程式,hex editor.

reference: 

1.2.

fread和 fgets的區別

fread 和fgets 的區別 fread 以位元組位計算長度 按照指定的長度和次數讀取資料 遇到結尾或完成指定長度讀取後停止 fgets 整行讀取 遇到回車換行或結尾停止 在文字方式時使用.讀字串函式 fgets 函式的功能是從指定的檔案中讀乙個字串到字元陣列中,函式呼叫的形式為 fgets 字...

fread和flushall的問題

今天測試寫過的一段程式,比較頻繁的出現乙個fread錯誤 貼 int sendchannelinfo socket obj sock else if postsend sock,sendbuf no error return 0 錯誤描述 讀檔案的時候,fopen正常,得到正確的檔案指標,之後的若干...

read與fread的區別

與 fread 的區別的誤解 rel noopener noreferrer read 與 fread 的區別的誤解 刻卜浪興 前多時間梳理了一些linux上的程式設計,其實就是認識的大量的系統呼叫 posix 這裡有乙個我們經常提出的問題就是fread,read的區別。當然這兩個分別代表了操作檔案...