为什么我不必每次使用printf时都刷新输出缓冲区?

时间:2016-05-04 13:30:05

标签: c

在此代码中:

#include<stdio.h>
int main()
{
    printf("I");
    printf("am");
    printf("a");
    printf("good");
    printf("boy");
    return 0;
}

为什么我不必每次都使用fflush(stdout)?我的意思是如果没有新行,如何在控制台中打印字符串(因为新行刷新了输出缓冲区)。或者缓冲区是否已满,所以我不明确地这样做?如果是这样的话? / p>

1 个答案:

答案 0 :(得分:4)

请注意,stdout流是缓冲的,因此迈克尔评论说,当程序退出时,您将看到输出( )。如果您想立即打印输出,可以使用fprintf之类的

fprintf(stderr, "my Text");

参见ISO C99第7.19.3 / 3节:

  

如果未缓冲流,则会显示字符   来源或目的地尽快。除此以外   字符可以被累积并发送到主机或从主机发送   环境作为障碍。

     

当流完全缓冲时,字符应该是   当缓冲区时,作为块传输到主机环境或从主机环境传输   充满了。

     

当流被缓冲时,字符应该是   当换行时,作为块发送到主机环境或从主机环境发送   遇到了角色。

     

此外,字符旨在作为块传输   当填充缓冲区时,请求输入时的主机环境   在无缓冲的流上,或在缓冲的行上请求输入时   需要从主机传输字符的流   环境。

     

对这些特性的支持是实现定义的,并且可能   受到setbuf和setvbuf函数的影响。