-2
好吧,我會開始說我正在做一個網絡服務器。我有一個功能getFileContent
我用它來從我的文件讓我的內容,看起來像這樣從函數讀取文件中的意外行爲C
char* getFileContent(char *filename)
{
long length;
char *buffer;
FILE *f = fopen (filename, "r");
if (f) {
fseek (f, 0, SEEK_END);
length = ftell (f);
fseek (f, 0, SEEK_SET);
buffer = malloc (length + 1);
if (buffer) {
fread (buffer, 1, length, f);
}
fclose (f);
}
if (buffer != 0) {
return buffer;
} else {
return NULL;
}
}
並調用這個函數的時候,我得到一些奇怪的行爲。
如果我只是這樣稱呼它
char *fileContent = getFileContent(path);
例如,當我得到filecontent返回,它附加了2或3個怪異的字符。
但是,如果我將它調用兩次給同一個變量,它會追加另一組奇怪的字符。
但是,如果我第三次在程序開始時調用函數main
。例如,通過將/etc/hosts/
中的內容轉換爲完全不同且未使用的變量,它會在代碼後面正常打印輸出。
我試過看到這個問題,但它似乎很隨意,如果有人能幫助我,我真的很感激它。
然後你的函數結束可以用'return buffer;'替換。 –
如果打開文件失敗,則讀取'buffer'的未初始化值。編譯器應該能夠警告你這個... –