【发布时间】:2019-10-29 22:03:46
【问题描述】:
当我使用 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.
【问题讨论】:
-
请尝试创建minimal reproducible example 向我们展示,并向我们展示实际和预期的输出。
-
这可能是 C 库中的错误,或者您可能做错了什么。除非您显示用于设置缓冲区的代码,否则很难判断。我不知道您的“最多 8 个字符的正确字符表示”指的是什么。你的意思是 UTF-8 序列吗?
-
fprintf(buffer);绝对不正确。你的意思是printf(buffer);?这也是不正确的,因为第一个参数应该是一个以 null 结尾的 printf 格式字符串。 -
@IanAbbott 我的错。
-
您的缓冲区不包含以 null 结尾的字符串。