首页 文章

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

提问于
浏览
3

以下程序显示当发生“除以零”等错误时,缓冲的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 回答

  • 4

    如果你的标准输出是去一个终端,是的,它等于刷新,因为 printf() 将使用基于行的缓冲 .

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

相关问题