背景
今天一个同事在定位栈溢出的问题的时候,在问题函数的入口处加了一个printf打印函数来协助定位问题原因(当时不知道是stack overflow),发现printf没有将信息打印到stdout程序就dump了。我这边就在想一个问题,printf的信息从buffer到stdout的时间和后续代码执行的一个先后顺序到底是什么呢?
一些结果
- 查了一下,关于printf从buffer输出到stdout的时间点和后续溢出问题代码的先后顺序,貌似是compiler的问题,gcc的话就不会打印输出直接dump调,turbo c的话会输出。
- 要么就用fprintf或者在printf下面加fflush(stdout) 保证输出顺序。
- 还有一点,关于stdin是否会自动刷新stdout的问题,找了一个link:Does reading from stdin flush stdout?