fread を使用してファイルを読み取り、内容を出力しようとしているだけです。部分的に機能しています。すべてを正しく出力しますが、一連のランダムな文字で終了します。
#include <iostream>
using namespace std;
void ReadFile(char* filename,char*& buffer)
{
FILE *file = fopen(filename,"rb");
fseek(file,0,SEEK_END);
int size = ftell(file);
rewind(file);
buffer = new char[size];
memset(buffer,0,size);
int r = fread(buffer,1,size,file);
cout << buffer;
fclose(file);
}
int main()
{
char* buffer;
ReadFile("test.txt",buffer);
cin.get();
}
この例では、「サイズ」が 50 であるとしましょう。何らかの理由で、fread が呼び出された後、バッファーのサイズは 55 または 56 になります。使用前にバッファを空にして出力してみましたが、すべて正常です(空です)。fread を呼び出した直後に、バッファが何らかの形で大きくなり、ランダムな文字でいっぱいになります。テキスト ファイルを 16 進エディタで開いて、表示されていないものがないことを確認しました。ファイルは 50 バイトです。fread は読み取ったバイト数を返します。この場合は「r」に返されます。「r」は本来あるべき値です。それで、これらのバイトはどこから来ているのですか?
簡略化: fread は読み取った正しいバイト数を返しますが、fread が呼び出された後、バッファが何らかの形で大きくなり、ランダムな文字で埋められます。なぜ?
私は一生、これがどのように起こっているのか理解できません。
また、誰かが私に簡単な修正を与える前に、私は buffer[r] = '\0' を実行するだけでランダムな文字を出力しないようにすることができることをすでに知っていますが、なぜこれが起こっているのか知りたいです。