永发信息网

我用C语言的fgetc来实行一个文件的拷贝,为什么每次总拷贝不完?

答案:1  悬赏:30  手机版
解决时间 2021-03-11 09:11
程序代码如下。我想拷贝一个2进制文件,用ue编辑器分析16进制代码的时候当读入完0x7D的数据后,就不会继续读了,下一个字节的数据时0x1A,难道读入0x1A会是EOF?
我把其他地方改成0x1A时,也会在这个地方停止读入。
请问0x1A和EOF有什么关系,它又不可能是-1!
求高手指导。
#include <stdio.h>
void main()
{
FILE *fin,*fout;
int ch;
fin=fopen("d:\\98.dat","r");
fout=fopen("d:\\98copy.dat","w");

ch=fgetc(fin);
while(EOF!=ch)
{
fputc(ch,fout);
ch=fgetc(fin);
}
printf("\nsuccess!\n");

}
最佳答案
fopen打开二进制文件需使用参数“rb” "wb"
fin=fopen("d:\\98.dat","rb");

你是按文本方式打开的文件,读到“0x1a”, fgetc确实会返回-1。 这个原因我也没想明白。
不过读二进制文件就按二进制方式打开文件,就不会出错。

补充:
关于读到0x1A的问题,我找到一些说法,好像并没有完美解决,只能是避免了。以下是我找到的:

"0x1A在ASCII码中代表EOF,在过去,ASCII码EOF曾经在unix/linux中被作为文件结束符使用,微软继承了这个传统,也以EOF作 为文件的结束符,不过,笔者手里的一些资料表明,微软在dos5.0以后就抛弃了这种做法。但实际情况是,笔者在dos6.22、windows3.1、 windows3.2、windows9x、windows2k、xp、2003都存在这种问题。同时,这种问题是系统还是库函数造成的也有待进一步查 证,由于没有源码,无法证实,如果哪位朋友有这方面的资料,希望可以共享。另一方面,鉴于dos/windows下所有主流编译器例如VC、BCB、 gcc、tc2.0、bc3.1等都是同样的结果,笔者倾向于这是系统原因造成的。"
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
速达3000pro系统的数据存放在哪里
东瀛食府怎么去啊,有知道地址的么
听说4万块钱在缅甸买一个女人
右图为存放水果时,空气中的氧气浓度(x)与水
2017年今年江苏省最高分是多少
侄子考上大学,送多少礼合适
浪潮造型在什么地方啊,我要过去处理事情
下列项目中,属于非货币性资产交换的有( )。A
汝州市平顶山三星苹果售后维修我想知道这个在
四平欧亚从车站怎么走 几路公交 打车多少钱
考试电脑阅卷可扫描到数学铅笔作图吗?
塑料分那几种其区别特点其化学名叫什么
小学二年级语文课本上册识字5的蛇字除非毒蛇
动物可以进行光合作用吗?
我家的成犬博美因为家里来了一只小狗要咬我,
推荐资讯
伊春市乌马河区质监局在什么地方啊,我要过去
回水湾我想知道这个在什么地方
2013年11 月8日,中央电视台举行了“寻找最美
小韩粮油店这个地址在什么地方,我要处理点事
我国的四个直辖市中的县是什么级别
有三块40G的硬盘,当创建RAID-5卷后,此卷的
撒桥是什么意思 比如说
为什么这样爱你疼你却失去你,我痛得不能呼吸
路顺村这个地址在什么地方,我要处理点事
租房取住房公积金都需要准备什么材料
从维坊到郎坊做火车几个小时
足球出线什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?