我不明白为什么有时我需要使用fflush()
而有时不需要。
我的程序目前正在发生段错误,我正在使用打印语句对其进行调试。当程序段错误时,不会stdout
自动刷新其缓冲区?
我不明白为什么有时我需要使用 fflush() 而有时不需要。
有时stdio
缓冲区会被刷新,有时则不会。例如,简单地在打印的内容中包含“\n”通常会刷新它(因为stdout
默认情况下连接到终端时是行缓冲的)。
当程序出现段错误时,stdout 不会自动刷新其缓冲区吗?
Stdio 缓冲区由exit
. 当一个信号(例如SIGSEGV
)杀死一个进程时,exit
不调用。另一种在不刷新stdio
缓冲区的情况下退出进程的方法是使用 Unix-specific call _exit
。
不,为什么要这样。该程序被操作系统杀死。如果发生段错误,则程序不再处于有意义的状态,因此除了立即终止之外,此时没有任何事情可以安全地发生。
(并且不要没有人尝试为 注册信号处理程序SIGSEGV
。)
“我无法弄清楚为什么在这段代码中调用 fflush (stdout) 我尝试评论这一行并且行为完全相同。”
因为如果该输出不以换行符结尾,则不能保证您会看到以前的 printf() 输出。
基本上,只有在显示没有换行符的提示时才需要它,并且要确保用户可以看到它。
看到这个网站。