c - fread() 从当前文件和旧文件中读取

标签 c text fread

当我使用这段代码时

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/

相关文章:

c 命令 system() 的输出可以进入文件而不是显示在控制台上吗?

c - 验证 C 数组中的输入并检查 char 的值

c - 在消息队列环境中一般处理通信所需的帮助——多个客户端!

javascript - 使用 React 组件处理我网站上的所有文本

java - 在java中使用GZIP压缩文件

c - 转到 C 中二进制文件的某个点(使用 fseek),然后从该位置读取(使用 fread)

c - 从设备包含的文件中的 st_dev 字段查找设备文件

javascript - 使用 JavaScript 从 anchor 标记中提取 anchor 文本

c - 如何正确打印 JPEG 文件的字节? - CS50 PSET3 恢复

c - 在 C 中读取包含 long 数组的文件