我正在从文件中读取纯文本 - 按行,具有以下功能:
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))条件为真。
您对此问题的原因有什么想法吗?
答案 0 :(得分:1)
它看起来不像随机数据 - 它是整数值为1的字节序列(假设x86或类似的CPU)。
我希望有两种情况之一:
1)你正在写下缓冲区的末尾,而其他东西正在使用相同的内存
2)程序中的其他地方,你将另一个数组的末尾写入缓冲区使用的内存中。
从评论中,我看到你已经调试了它,似乎排除了两种选择。我想知道在调试时是否禁用了优化?我在过去调试优化二进制文件时遇到了棘手的经验。