起步
标准输出被滞后了. 不同编译器出来的结果可能不一样. 我在windows平台的 VC++6.0 上是 121212.
分析
标准输出和标准出错的缓冲机制不同,标准出错不缓冲,标准输出有缓冲.
什么情况下会刷新缓冲区?
- 程序结束时调用
exit(0)
. - 遇到
\n
,\r
时会刷新缓冲区. - 手动刷新
fflush
. - 缓冲区满时自动刷新.
附录
示例代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i;
for (i = 0; i < 3; ++i)
{
printf("1");
fprintf(stderr, "2");
}
}
找到了让 windows 平台也使用输出缓冲的方式了:
#include <stdio.h>
char 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");
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。