关于手册页中无效使用的setbuf示例的困惑

时间:2019-03-04 05:26:28

标签: c linux stdio

man setbuf在Ubuntu上:

  

您必须确保buf指向的空间在时间流关闭之前仍然存在,这在程序终止时也会发生。例如,以下无效:

联机帮助页中的示例代码无效

#include <stdio.h>

int main(void)
{
    char buf[BUFSIZ];
    setbuf(stdin, buf);
    printf("Hello, world!\n");
    return 0;
}

为什么无效?程序通过buf返回后,局部变量return 0;被销毁。

1 个答案:

答案 0 :(得分:5)

一旦执行returnbuf将不再存在,但是程序的执行将继续执行退出处理程序的调用和流的关闭。因此,当流关闭时,缓冲区不存在。