从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;
被销毁。
答案 0 :(得分:5)
一旦执行return
,buf
将不再存在,但是程序的执行将继续执行退出处理程序的调用和流的关闭。因此,当流关闭时,缓冲区不存在。