为什么 printf
在调用后不会刷新,除非格式字符串中有换行符?这是 POSIX 行为吗?我怎样才能让 printf
每次都立即刷新?
最佳答案
stdout
流默认是行缓冲的,因此只会在到达换行符(或被告知时)后显示缓冲区中的内容。您有几个选项可以立即打印:
使用
fprintf
打印到stderr
(stderr
为 unbuffered 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/37872725/