将换行符添加到printf()相当于刷新流吗?

时间:2014-03-13 16:58:50

标签: c printf

以下程序显示了缓冲I / O如何在程序中出现问题,例如“除以零”等错误。发生:

int main()
{
    int a = 1, b = 0, c;

    printf("Dividing...");
    c = a/b;

    printf("Answer is: %d\n", c);
    return 0;
}

输出为Floating point exception (core dumped)

足够公平。但令人惊讶的是,如果我将第一个printf更改为printf("Dividing...\n");,那么该文本实际上会在程序崩溃之前打印出来(顺便说一句,我在Linux上运行GCC)。

我是否可以得出结论,添加换行符相当于刷新?如果是这样,如果我的所有printf()字符串都以\n结尾,那么我实际上是在剥夺自己的缓冲I / O的好处吗?

1 个答案:

答案 0 :(得分:4)

如果您的标准输出要转到终端,是的,它等于刷新,因为printf()将使用基于行的缓冲。

如果它被重定向到文件,那么没有。在这种情况下,printf()使用更大的缓冲区,通常对应于文件系统块大小或其他,以优化IO。