作者mistel (Mistel)
看板C_and_CPP
標題[問題] 以2進位打開檔案讀取4bytes整數
時間Sat May 9 15:32:38 2020
題目規定要開啟一個檔案,這個檔案的前4bytes是一個正整數 代表該檔案共有多少筆資料
小弟使用fread做這件事,結果一直報run time error
示意程式碼:
FILE *fp = fopen("in.dat", "rb");
int num_data[1];
fread(num_data, sizeof(int), 1, fp);
程式會在fread()就執行失敗,跳出程式
請問是為什麼?要如何改善呢?謝謝
附上:
https://codeshare.io/2WEeAb
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.209.131 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1589009560.A.074.html
※ 編輯: mistel (111.71.85.42 臺灣), 05/09/2020 15:54:47
1F:→ withoutshine: 你有檢查過你的 fopen 回傳值嗎?05/09 16:27
2F:推 cutekid: 應該是錯在第 16 行的 malloc,不是錯在第 14 行05/09 16:32
3F:→ cutekid: 因為第 16 行掛掉,所以第 15 行的 printtf 沒有結果05/09 16:32
4F:→ cutekid: 讓原po 誤以為死在第 14 行的 fread05/09 16:32
檢查過後確實是如此 請問malloc為什麼出錯了?
謝謝大大
※ 編輯: mistel (111.71.85.42 臺灣), 05/09/2020 16:51:02
5F:推 cutekid: 您可以先不要 malloc,先看第 15 行的 datanum[0] 的值05/09 16:55
6F:→ cutekid: 看看是不是太大,還是負數之類的05/09 16:55
試過了 讀出來是200,值是正確的
檔案大小是404bytes
第一個整數是4bytes
後面的都是short int,所以是2bytes
所以有200個沒錯
※ 編輯: mistel (111.71.85.42 臺灣), 05/09/2020 16:56:30
※ 編輯: mistel (111.71.85.42 臺灣), 05/09/2020 16:57:41
我弄懂了...是我操作array有問題
我的buffer應該要宣告short int *buffer才對
感謝cutekid大大
※ 編輯: mistel (111.71.85.42 臺灣), 05/09/2020 17:04:49
7F:推 cutekid: 如果不是掛在 malloc ,可能掛在第 21 行 05/09 17:05