标题:[疑难杂镇]用二进制处理文件总大一字节,.....
只看楼主
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
 问题点数:0 回复次数:7 
[疑难杂镇]用二进制处理文件总大一字节,.....

我上网查了下资料说
用feof时,遇到结尾返回还是0,要再读入一字节(文件结束标志-1)才返回真
这个是我证实了的,确实如上

但奇怪的是,我按如下处理后,还是大一字节

#include <stdio.h>

int main()
{ FILE *sfp,*dfp;
long filesize,i=0;

if (sfp=fopen("d:/a.abc","rb"))
{ dfp=fopen("d: .abc","wb");
fseek(sfp,0L,SEEK_END);
filesize=ftell(sfp); /*单位字节*/
printf("文件大小: %ld 字节\n",filesize);
rewind(sfp);
puts("文件处理中....");
while(!feof(sfp))
{ if (i<filesize)
fputc(fgetc(sfp),dfp);
++i;
}
fclose(sfp);
fclose(dfp);
}
return 0;
}
而把条件改成

while(!feof(sfp))
{ if (i<filesize)
fputc(fgetc(sfp),dfp);
else
break;
++i;
}

结果又正确了,这是咋回事

搜索更多相关主题的帖子: 二进制 字节 疑难 sfp 
2007-03-04 09:27
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
得分:0 
while(i<filesize)
{
fputc(fgetc(sfp),dfp);
++i;
}
改成这样也对
但这样
while(!feof(sfp))
{ if (i<filesize)
fputc(fgetc(sfp),dfp);
++i;
}
结果就大一字节
2007-03-04 09:30
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
得分:0 
就是执行与没执行 ++i 的关系嘛...

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-03-04 13:34
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
得分:0 
以下是引用I喜欢c在2007-3-4 13:34:56的发言:
就是执行与没执行 ++i 的关系嘛...

哪一个没执行++i呢?

2007-03-04 14:06
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
得分:0 
你改了的就比没改的少执行一次

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-03-04 14:11
田里兵蜂
Rank: 1
等 级:新手上路
威 望:2
帖 子:604
专家分:0
注 册:2007-1-29
得分:0 
但filesize是一个定值呀
我的循环体内有判断呀
if (i<filesize)
//执行拷贝字符

这样按理说,即使不退出循环也不会多拷贝一个字节吧
2007-03-04 14:21
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
得分:0 
是...
我也不知道为什么.
但就只有那区别
会不会是编译器BUG?
想想都....

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-03-04 14:41
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
C-FREE中我也用了下。的确和LZ说的一样!

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2007-03-04 14:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-122468-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.312525 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved