我在Fedora 20上使用Anjuta和gdb并创建了一个C Makefile项目。代码如下所示:
#include <stdio.h>
int main (void)
{
° printf ("1");
° printf ("2");
° printf ("3");
return (0);
}
°表示我在该位置设置断点。
现在,当我调试代码时,当前行是这些printf函数之一时没有输出。只有当我退出主'123'时才会出现在终端中。
如果我将\ n添加到第二个printf参数,那么当我从断点2移动到第3个时,“12”将显示为输出。
答案 0 :(得分:4)
默认情况下,stdout在写入终端时是行缓冲的,在写入任何其他类型的流时完全缓冲。由于您不打印任何换行符,因此输出正在缓冲。您可以使用setbuf()
更改缓冲模式,使用换行符结束每个字符串,或者在要打印时使用plac调用fflush()
。
答案 1 :(得分:3)
这是因为printf写入了恰好缓冲的stdout。有关详细信息,请参阅here.
答案 2 :(得分:2)
在每个printf之后添加fflush(stdout)。您的输出很小并保持缓冲,直到程序退出。