【问题标题】:Setting minimum buffer size设置最小缓冲区大小
【发布时间】: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 结尾的字符串。

标签: c buffer


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2012-08-10
    相关资源
    最近更新 更多