我正在从文件中读取纯文本 - 按行,具有以下功能:
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/