c - 读取文本文件错误 : strange '\x01' '\0' '\0' '0' sequences

标签 c file text stream fread

我正在从文件中读取纯文本 - 按行,具有以下功能:

int readline(FILE *in, char * buf) {
char c;
buf[0]='\0';
for (int i=0; i<BUFSIZ-1; i++) {
    fread(&c,1,1,in);
    if (ferror(in)) return 1; 
    if (feof(in)) break;
    buf[i]=c; 
    if (c=='\n') break;
    }
    if (buf[BUFSIZ-1]!='\0') return 1;
    return 0;
}

它正确读取了 28816 个字符,然后麻烦就开始了。 而不是阅读接下来的四个字符:

' ' 'f' 'o' 'r'

它读到奇怪的东西:

'\x01' '\0' '\0' '\0'

之后,它会正确读取所有内容,直到 33080 个字符。 它没有正确读取接下来的 12 个字符,而是读取了三个序列:

'\x01' '\0' '\0' '\0' '\x01' '\0' '\0' '\0' '\x01' '\0' '\0' '\0'

然后,它再次正确读取所有内容,直到某个点。

发生此问题时,(ferror(in)) 和 (feof(in)) 条件都不为真。

您对这个问题的原因有什么想法吗?

最佳答案

它看起来不像随机数据 - 它是整数值 1 的字节序列(假设 x86 或类似的 CPU)。

我希望有两种情况之一:

1) 你正在注销缓冲区的末尾,而其他东西正在使用相同的内存

2) 在程序的其他地方,您正在将另一个数组的末尾写到缓冲区使用的内存中。

从评论中,我看到您已经对其进行了调试,似乎排除了这两种选择。不知道你调试的时候优化是不是关掉了?我过去曾有过调试优化二进制文件的棘手经历。

关于c - 读取文本文件错误 : strange '\x01' '\0' '\0' '0' sequences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9420447/

相关文章:

javascript - iframe JS富文本编辑器问题

C++追加到文件的第二行

这个阿克曼函数的实现可以称为尾递归吗?

使用 pThreads 的 C 代码编译正常,但会出现段错误,使用 gdb 无济于事

c++ - 从文件加载数组

java - 使用 Java 对文本文件执行二进制搜索

android - 在 Android 中添加输入约束来编辑文本?

c - 声明和初始化全局结构时遇到问题

c++ - 不使用线性和二进制查找未排序数组的最大数量

java - 在Eclipse环境中打开.dat和.key文件