好的,我开始说我正在制作一个网络服务器。我有一个函数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/
中的内容转换为完全不同且未使用的变量,它会在代码中稍后打印输出。
我试图看到这个问题,但它似乎是随机的,如果有人能帮助我,我真的很感激。
答案 0 :(得分:1)
当您阅读文件内容时,您的缓冲区不 NUL
已终止。因此,如果您将其视为C字符串(例如printf),则需要调用未定义的行为。
您应检查fread
的返回值,并在读取完最后一个字节后放置'\0'
。