考虑以下简单的 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);
}
它将读取的文件仅包含:
你好世界!
输出是:
世界你好!²²²²▌▌▌▌▌▌▌↔☺</p>
自从我在 C/C++ 中做任何重要的事情以来已经有一段时间了,但通常我会假设缓冲区被分配的比必要的大,但情况似乎并非如此。
fileLen 最终为 12,这是准确的。
我现在在想,我必须只是错误地显示缓冲区,但我不确定我做错了什么。
谁能告诉我我做错了什么?