ファイルをバッファーに読み取り、そのバッファーをコンソールに表示する次の単純な C プログラムを考えてみましょう。
#include<stdio.h>
main()
{
FILE *file;
char *buffer;
unsigned long fileLen;
//Open file
file = fopen("HelloWorld.txt", "rb");
if (!file)
{
fprintf(stderr, "Unable to open file %s", "HelloWorld.txt");
return;
}
//Get file length
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
//Allocate memory
buffer=(char *)malloc(fileLen+1);
if (!buffer)
{
fprintf(stderr, "Memory error!");
fclose(file);
return;
}
//Read file contents into buffer
fread(buffer, fileLen, 1, file);
//Send buffer contents to stdout
printf("%s\n",buffer);
fclose(file);
}
読み取るファイルには、次のものが含まれています。
「こんにちは世界」
出力は次のとおりです。
Hello World!²²²²▌▌▌▌▌▌▌↔☺</p>
C/C++ で何か重要なことをしてからしばらく経ちましたが、通常はバッファーが必要以上に大きく割り当てられていると思いますが、そうではないようです。
fileLen は最終的に 12 になり、これは正確です。
バッファを間違って表示しているに違いないと今考えていますが、何が間違っているのかわかりません。
誰かが私が間違っていることを教えてくれますか?