我编写了以下代码将文本文件复制到另一个:
FILE *fpr, *fpw;
int ch;
fpr = fopen("M.txt","r");
fpw = fopen("P.txt","w");
if(fpr == NULL)
printf("File open failed!");
else
{
while(1)
{
ch = fgetc(fpr);
if(ch == EOF)
break;
fputc(ch, fpw);
}
fclose(fpr);
fclose(fpw);
printf("Successfully copied!");
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好.然后,我改变int ch到char ch它也为我工作.但是,当我使用以下代码复制.exe文件时,文件复制无法正常工作.
FILE *fpr, *fpw;
char ch;
fpr = fopen("M.exe","rb");
fpw = fopen("P.exe","wb");
if(fpr == NULL)
printf("File open failed!");
else
{
while(1)
{
ch = fgetc(fpr);
if(ch == EOF)
break;
fputc(ch, fpw);
}
fclose(fpr);
fclose(fpw);
printf("Successfully copied!");
}
Run Code Online (Sandbox Code Playgroud)
我改变了char ch,int ch然后它工作正常!为什么在没有文本文件的二进制文件中发生这种情 char ch在二进制的情况下使用时会发生什么?请帮忙...感谢您提前反馈.
这是因为对于char来说EOF可能是0或255,它可以出现在二进制文件的中间但不能出现在文本文件中(这就是为什么只有文本文件才能用于char).但是对于int,EOF为-1,无论如何都不能显示在文件的中间(只有0-255包含).