1

我在 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 移动到第三个断点时,“12”将显示为输出。

4

3 回答 3

5

默认情况下,stdout 在写入终端时是行缓冲的,在写入任何其他类型的流时是完全缓冲的。由于您没有打印任何换行符,因此正在缓冲输出。你可以用 改变缓冲模式setbuf(),用换行符结束每个字符串,或者fflush()在你想打印时调用。

于 2013-11-03T20:53:56.963 回答
4

这是因为 printf 写入恰好被缓冲的标准输出。有关更多详细信息,请参见此处。

于 2013-11-03T20:53:47.883 回答
2

在每个 printf 之后添加 fflush(stdout)。您的输出很小,并且在程序退出之前一直保留在缓冲区中。

于 2013-11-03T20:53:53.677 回答