![](/img/trans.png)
[英]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.