设置最小缓冲区大小

Setting minimum buffer size

我在使用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.

传递给 setvbuf 的缓冲区内容在任何时候都是不确定的(参见 7.21.5.6/2 in C11 standard or cppreference page on setvbuf)。所以你不应该期待任何事情。