作者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/cn.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