永发信息网

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

答案:1  悬赏:30  手机版
解决时间 2021-03-11 09:11
  • 提问者网友:無理詩人
  • 2021-03-10 17:47
程序代码如下。我想拷贝一个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");

}
最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-03-10 17:54
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等都是同样的结果,笔者倾向于这是系统原因造成的。"
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯