0

次のプログラムは、1 つの.exeアプリケーション ファイルのコピーを作成することを目的とています。

私がしているのは、バイナリモードでソースファイルから読み取り、同じモードで新しいコピーに書き込むことです。このために変数を使用chchますchar。元のファイルは26MBです。しかし、 のタイプを に変更するchと、プログラムは正常に動作し、サイズが 26MBのRealPlayer.exeintの正確なコピーが提供されます。この前提から生じる 2 つの質問をさせてください。お答えいただければ幸いです。両方の部分:

1)型が機能しているのに、型charを使用するとch混乱するのはなぜintですか?つまり、元のファイルから 4 バイトを読み取り、それをコピー ファイルに書き込みます。この 2 つの違いはなぜですか?charcharint

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);

}
4

2 に答える 2