为什么printf在调用后不刷新,除非换行符是格式字符串?

为什么printf在调用后不刷新,除非换行符的格式为字符串?这是POSIX行为吗?我怎样才能每次都立即刷新printf

默认情况下,stdout流是行缓冲的,因此只会在到达换行符后(或被告知时)显示缓冲区中的内容。您有几个选项可以立即打印:

  • 改为使用fprintf打印到stderrstderr默认无缓冲):

    fprintf(标准,“我将立即打印”);
    
  • 使用fflush在需要时刷新stdout:

    printf(“缓冲,将被刷新”);
    fflush(stdout);//现在将打印标准输出缓冲区中的所有内容
    
  • 使用setbuf禁用标准输出上的缓冲:

    setbuf(标准输出,空);
    
  • 或者使用更灵活的setvbuf

    setvbuf(标准输出,空,0);
    

发表评论