簡體   English   中英

C 中函數讀取文件的意外行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM