次のプログラムは、1 つの.exeアプリケーション ファイルのコピーを作成することを目的としています。
私がしているのは、バイナリモードでソースファイルから読み取り、同じモードで新しいコピーに書き込むことです。このために変数を使用ch
しch
ますchar
。元のファイルは26MBです。しかし、 のタイプを に変更するch
と、プログラムは正常に動作し、サイズが 26MBのRealPlayer.exeint
の正確なコピーが提供されます。この前提から生じる 2 つの質問をさせてください。お答えいただければ幸いです。両方の部分:
1)型が機能しているのに、型char
を使用するとch
混乱するのはなぜint
ですか?つまり、元のファイルから 4 バイトを読み取り、それをコピー ファイルに書き込みます。この 2 つの違いはなぜですか?char
char
int
2)char
type forを使用すると、元のファイルに比べてファイルのサイズが小さいのはなぜch
ですか。文字ごと(またはバイトごと)にコピーしますが、「整数ごと」(または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);
}