使用setvbuf()函数设置文件处理缓冲区时,我注意到了一些东西。如果我不使用256或更大的缓冲区,当我尝试打印缓冲区时会出现奇怪的符号。但是,如果我使用256个大小的缓冲区,则可以得到最多8个字符的正确char表示形式。我已经对这个问题进行了研究,但由于缺乏知识,我想找不到答案。
#include <stdio.h>
#define SIZE 8 //Below 256
int main(void)
{
char buffer[SIZE];
FILE *fp = fopen("name.txt","w");
setvbuf(fp,buffer,_IOFBF,SIZE);
fputs("a",fp);
printf("%s\n",buffer);
fclose(fp);
return 0;
}
预期产量
a
实际输出
a!'^//Something like this.
答案 0 :(得分:1)
传递给setvbuf
的缓冲区的内容在任何时候都是不确定的(请参阅7.21.5.6/2 in C11 standard或cppreference page on setvbuf)。因此,您不应期望任何事情。