设置最小缓冲区大小
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)。所以你不应该期待任何事情。
我在使用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)。所以你不应该期待任何事情。