起步
标准输出被滞后了. 不同编译器出来的结果可能不一样. 我在windows平台的 VC++6.0 上是 121212.
分析
标准输出和标准出错的缓冲机制不同,标准出错不缓冲,标准输出有缓冲.
什么情况下会刷新缓冲区?
- 程序结束时调用
exit(0)
. - 遇到
\n
,\r
时会刷新缓冲区. - 手动刷新
fflush
. - 缓冲区满时自动刷新.
附录
示例代码:
#includeint main(int argc, char const *argv[]){ int i; for (i = 0; i < 3; ++i) { printf("1"); fprintf(stderr, "2"); }}
找到了让 windows 平台也使用输出缓冲的方式了:
#includechar buf[512]; int main(int argc, char const *argv[]){ setvbuf(stdout, buf, _IOLBF, 512); int i; for (i = 0; i < 3; ++i) { printf("1"); fprintf(stderr, "2"); }}