考慮一個文件讀入緩衝區,並顯示該緩衝區到控制檯下面這個簡單的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