c - 为什么 printf 在调用后不会刷新,除非格式字符串中有换行符?

标签 c printf flush

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

最佳答案

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

  • 使用 fprintf 打印到 stderr(stderrunbuffered by default ):

    fprintf(stderr, "I will be printed immediately");
    
  • 每当需要时使用fflush刷新stdout:

    printf("Buffered, will be flushed");
    fflush(stdout); // Will now print everything in the stdout buffer
    
  • 使用 setbuf 禁用标准输出上的缓冲:

    setbuf(stdout, NULL);
    
  • 或者使用更灵活的setvbuf :

    setvbuf(stdout, NULL, _IONBF, 0); 
    

关于c - 为什么 printf 在调用后不会刷新,除非格式字符串中有换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359310/

相关文章:

java - 索引超出范围(文件读取)

c - 从数组和程序中提取整数值而不显示 printf 函数

c - 如何将 printf 中写入的值调用到另一个 printf

google-app-engine - 如何从 appcfg.py 刷新内存缓存?

c - 在 C 中免费动态创建 3d 数组

c - 编译器如何知道它在数组的末尾?

c - 将 malloc 与结构和 strcpy 一起使用

c - 在 main、C 中使用后面函数中的变量

c - dup() 和缓存刷新

php - 在 Zend Framework 中渲染页面头部后刷新缓冲区