我写了下面的代码来将文本文件复制到另一个:
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!");
}
它工作得很好。然后我将 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!");
}
我将 char ch
更改为 int ch
然后它工作正常!为什么二进制文件而不是文本文件会发生这种情况?在二进制的情况下使用 char ch
会发生什么?
请帮忙...
提前感谢您的反馈。
最佳答案
这是因为 char 的 EOF 可能是 0 或 255,它可以出现在二进制文件的中间但不能出现在文本文件中(这就是为什么只有文本文件适用于 char)。然而,对于 int 来说,EOF 是 -1,它无论如何都不会出现在文件中间(只有 0-255 可以)。
关于c - 在c中复制.exe文件和文本文件的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670510/