以下程序旨在制作一个.exe应用程序文件的副本。但只有一件小事决定了它是否确实为我提供了预期文件RealPlayer.exe的正确副本或给我一个损坏的文件。
我所做的是以二进制模式从源文件中读取并以相同的模式写入新副本。为此,我使用了一个变量ch
。但是如果ch
是类型char
,我会得到一个损坏的文件,它的大小只有几个字节,而原始文件为26MB 。但如果我将类型更改为两部分:ch
int
1)为什么在类型工作时使用类型char
来ch
搞砸事情int
?类型有什么问题char
?毕竟,它不应该从原始文件中逐字节读取(就像char
一个字节本身一样)并将其逐字节写入新的副本文件?毕竟不是int
类型所做的,即从原始文件中读取 4 个字节,然后将其写入副本文件?为什么两者之间有区别?
2)char
如果我们使用type for ,为什么文件与原始文件相比如此小ch
?让我们暂时忘记复制的文件已损坏,并关注大小。为什么大小这么小如果我们逐个字符(或逐个字节)复制字符,但是当我们复制“整数乘整数”(或 4 字节乘 4 字节)时,是否很大(原始大小)?
一位朋友建议我停止提问并使用它,int
因为它有效而char
无效!!但是我需要了解这里发生了什么,因为我发现我对此事的理解严重失误。您的详细答案很多寻求。谢谢。
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch; //This is the cause of problem
//int ch; //This solves the problem
FILE *fp,*tp;
fp=fopen("D:\\RealPlayer.exe","rb");
tp=fopen("D:\\copy.exe","wb");
if(fp==NULL||tp==NULL)
{
printf("Error opening files");
exit(-1);
}
while((ch=getc(fp))!=EOF)
putc(ch,tp);
fclose(fp);
fclose(tp);
}