[英]C - writing and reading from FIFO file in parallel - unexpected behaviour
[英]Unexpected behaviour from function reading file in C
好的,我首先要說我正在制作一個網絡服務器。 我有一個函數getFileContent
我用來從我的文件中獲取我的內容,看起來像這樣
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);
例如,當我要返回文件內容時,它會附加 2 或 3 個奇怪的字符。
但是如果我對同一個變量調用兩次,它會附加另一組奇怪的字符。
但是,如果我在程序開始時在main
第三次調用該函數。 例如,通過將/etc/hosts/
的內容獲取到一個完全不同且未使用的變量,它會在代碼的后面正常打印輸出。
我試圖看到這個問題,但它似乎很隨機,如果有人能幫助我,我真的很感激。
當您讀取文件內容時,您的緩沖區不會以NUL
終止。 因此,如果您將其視為 C 字符串(例如 printf),則您正在調用未定義的行為。
您應該檢查fread
的返回值並在讀取的最后一個字節后放置一個'\\0'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.