私はfread関数を使いました。私はバッファサイズ4と "読み込みエラー"を取得しています。割り当てられたバッファが正しいサイズでないのはなぜですか?
なぜbuffer
はfileSize
ではありませんか?ここで
は私のコードです:私はプログラムを実行するとき
FILE *fp;
char* buffer;
fp = fopen("help.txt","r");
if (fp == NULL){
fputs("Can't open Help file, Help.txt",stderr);
exit(1);
}
fseek(fp, 0, SEEK_END);
long fileSize = ftell(fp);
rewind(fp);
buffer = (char*) malloc (sizeof(char)*fileSize);
if(buffer == NULL){
fputs("Memory Allocation Error",stderr);
exit(2);
}
size_t result = fread(buffer,1,fileSize,fp);
if(result != fileSize){
fputs("Reading error\n",stderr);
printf("File Size : %lu\n",fileSize);
printf("Result : %lu\n",result);
printf("Buffer Size : %u\n",sizeof(buffer));
exit(3);
}
fputs(buffer,stdout);
fclose(fp);
free (buffer);
は、これが出力されます。
Reading error
File Size : 224
Result : 219
Buffer Size : 4
"b" - > 'fopen(" help.txt "、" rb ");を追加してファイルバイナリを開こうとすると、あなたの計算を破壊するような、 – rekire
"目に見えない文字"はシステムの改行がC++改行に変換されているので、数バイトは失われます。バイナリモードで開くとその変換ができなくなります。 –
C++を使用している場合は、ファイルをC++形式(iostreams)で読み込まないようにしてください。 – dreamlax