我正在查看“C 陷阱和陷阱” ( PDF ) 第 5 章中给出的示例:
#include <stdio.h>
main()
{
int c;
char buf[BUFSIZ];
setbuf(stdout, buf);
while ((c = getchar()) != EOF)
putchar(c);
}
不幸的是,这个程序是错误的,原因很微妙。要查看问题出在哪里,请询问最后一次刷新缓冲区的时间。
答:在主程序完成后,作为库在将控制权交还给操作系统之前所做的清理工作的一部分。但是到那时,缓冲区已经被释放了!
main 只是一个必须清理堆栈和变量的函数。但这意味着什么:缓冲区已被释放?
我觉得很难理解。谁能详细解释一下?提前致谢。