c语言 - 从文本文件读取错误:奇怪的"\x01\0\00"序列



我正在逐行从文件中读取纯文本,函数如下:

int readline(FILE *in, char * buf) {
char c;
buf[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]!='') return 1;
    return 0;
}

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

' ' 'f' 'o' 'r'

它读到奇怪的东西:

'x01' '' '' ''

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

'x01' '' '' '' 'x01' '' '' '' 'x01' '' '' ''

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

当这个问题发生时,既不存在(ferror(in))也不存在(feof(in)。

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

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

我预计会出现以下两种情况之一:

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

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

从评论中,我看到你已经调试好了,似乎排除了这两种选择。我想知道您在调试时是否禁用了优化?我在过去调试优化的二进制文件时有过一些棘手的经历。

相关内容

  • 没有找到相关文章

最新更新