C中函数读取文件的意外行为

时间:2017-09-23 22:21:34

标签: c linux io

好的,我开始说我正在制作一个网络服务器。我有一个函数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/中的内容转换为完全不同且未使用的变量,它会在代码中稍后打印输出。

我试图看到这个问题,但它似乎是随机的,如果有人能帮助我,我真的很感激。

1 个答案:

答案 0 :(得分:1)

当您阅读文件内容时,您的缓冲区 NUL已终止。因此,如果您将其视为C字符串(例如printf),则需要调用未定义的行为。

您应检查fread的返回值,并在读取完最后一个字节后放置'\0'

相关问题