当我使用这段代码时
FILE *f = fopen(file, "rb");
const char *d;
if (f!=NULL) {
static char c[100000];
fread(c, sizeof(char), 10000000, f);
d = c;
fclose(f);
return d;
}
else{
/*
char *ff = f;
perror(ff);
*/
d = "Error";
fclose(f);
return d;
}
从包含这样文本的文件中读取
This
Is a test
它读起来很好。但是,如果我打开另一个包含此文本的文件
Test
它会读成这样
Test Is a test
为什么关闭文件后两者合而为一? 我现在放这个,但我仍然得到相同的结果
if (f!=NULL) {
fread(c, sizeof(c), len, f);
d = c;
fclose(f);
c[99999] = '\0';
return d;
}
最佳答案
看起来您的数组中还有上次读取的字符。您应该在返回之前以 null 终止字符串,fread()
不会为您执行此操作。
您还有一些其他问题,例如 fread()
的字符限制远远大于您的缓冲区大小。
除非你真的需要 c,否则你应该考虑使用 c++ 或什至其他一些具有更复杂的文件和文本处理库的语言,这会让你的生活更轻松。
关于c - fread() 从当前文件和旧文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487715/