fread读文件字节数不合理的问题

davelv 2008-12-15 11:52:58
在vc 2008 express下使用fread读取二进制文件例如1.exe,但是发现总共读取的字节数和原文件属性中的字节数相差很大,这是为什么?
如果用fread写到另外一个文件2.exe,从属性上看,两个文件差别在于2.exe末尾多了个空格,为什么会这样子呢?不解
核心代码

while(!feof(in))
{
fread(read_char,1,1,in);
fwrite(read_char,1,1,out);
filesize++;
info[*read_char]++;
}
...全文
374 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
davelv 2008-12-15
  • 打赏
  • 举报
回复
谢谢大家.
第一个问题解决了,主要是我read_char声明为char型,但是实际上char型有负数,所以info[*read_char]++;这里下标会变成负的,所以就出错了,后来更改为unsigned之后,字节数基本合理了

第二个问题,如果遇到文件末尾的时候fread还是会继续读,但是会返回一个错误的值,检查fread的返回值或者将fread提前一个循环就可以解决该问题
lq20051610211 2008-12-15
  • 打赏
  • 举报
回复
UP~
星羽 2008-12-15
  • 打赏
  • 举报
回复

这样看看

while(1)
{
fread(read_char,1,1,in);

if (feof(in))
break;


fwrite(read_char,1,1,out);
filesize++;
info[*read_char]++;
}


lann64 2008-12-15
  • 打赏
  • 举报
回复
while(!feof(in))
{
fread(read_char,1,1,in);//需要判断是不是读成功
fwrite(read_char,1,1,out);
filesize++;
info[*read_char]++;
}


最后一次不成功读入时,做了写动作。
你的read_char指向被初始化成空格?所以多写了空格。

需要判断是否读入成功,然后再写。
davelv 2008-12-15
  • 打赏
  • 举报
回复
是二进制打开的,最后两个文件相差1字节~~csdn居然不能上传图片~~郁闷了~~找个地方上传图片
星羽 2008-12-15
  • 打赏
  • 举报
回复
你要用2进制方式打开文件

FILE* p = fopen("1.exe", "rb");

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧