亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于fread函數,當文件流緩沖中剩余長度小于需要讀取的長度時的問題 ?有知道的嗎?

關于fread函數,當文件流緩沖中剩余長度小于需要讀取的長度時的問題 ?有知道的嗎?

C PHP
翻翻過去那場雪 2021-10-21 21:15:42
當輸入文件為二進制,長度遠大于4096的時候。由于文件流緩沖默認為4095.那么假設已經讀取了4080個字節之后,即fp_in->_cnt的值為15,再使用fread(g_buffer, 1, 20, fp_in);函數打算一次性讀出20個字節時,程序異常,fread執行時報Access Violation.有高手幫忙解釋下嗎?按道理說,文件流緩沖中剩余長度不足的時候,應該會自動從外存文件中一次性讀入4096個字節到緩沖中才對呀,有高手幫忙指點下嗎?
查看完整描述

2 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

fread在fp_in緩沖區中剩余字節為0的時候才會產生一個異常讓內核去處理,內核收到這個異常,就會讀取文件,將fp_in的緩沖區重新填滿。
也就是說:如果只剩下15個了,你要讀20個,那么就會先讀15個到g_buffer里,然后產生一個異常,內核重新填滿緩沖區,然后再從緩沖區里讀5個字節。

查看完整回答
反對 回復 2021-10-24
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

你一頓能吃四兩飯,你現在已經吃了三兩了,現在又有四兩擺在你的面前,你不能一次把這四兩又吃下去的。
程序同理,fread函數的原型如下:
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
只能讀到等于buffer指向的內存區的大小的count的。

查看完整回答
反對 回復 2021-10-24
  • 2 回答
  • 0 關注
  • 467 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號