考虑一个文件读入缓冲区,并显示该缓冲区到控制台下面这个简单的C程序:为什么我的简单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!
输出是:
的Hello World²²²²▌▌▌▌▌▌▌↔☺
,因为我做了什么在C/C显著它已经有一段时间++,但通常我会认为缓冲区被分配得比所需要的大,但这似乎并不是这样。
fileLen结束为12,这是准确的。
我现在在想,我必须只是显示缓冲区错误,但我不知道我在做什么错误。
任何人都可以告诉我我做错了什么吗?
取-1,你是对的! – GEOCHET 2008-11-03 22:48:33
我曾试图在某一时刻做到这一点,但出于某种原因,它看起来像我有一个大脑放屁,并使用\ n而不是\ 0为一些愚蠢的原因。告诉你我是生锈的! – GEOCHET 2008-11-03 22:51:08
我错过了缓冲区是fileLen + 1字节长... – JesperE 2008-11-03 22:52:08