来自Ubuntu的man setbuf
:
您必须确保时间流关闭时buf指向的空间仍然存在,这也会在程序终止时发生。例如,以下内容无效:
联机帮助页中的示例代码无效:
#include <stdio.h>
int main(void)
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}
为什么无效?程序通过buf
返回后,局部变量return 0;
被销毁。
执行return
后,buf
不再存在,但程序执行继续调用退出处理程序和关闭流。因此,当流关闭时,缓冲区不存在。