printf何时无法打印?
c中的printf函数并不总是在屏幕上打印输出。 例如,如果您忘记将\ n放在字符串的末尾,那么您有时会得不到o / p。 printf无法打印时是否还有其他一些条件。 我记得有人说有7个这样的条件。 你能帮忙吗?
标准输出是缓冲流,除非输入换行符,流关闭或程序正常退出,否则不保证刷新。 如果程序exception退出,则流可能不会刷新。 标准输出是线缓冲的,这就是换行刷新它的原因。 有些缓冲区不会刷新换行符。
它不是printf
不会总是打印,它不保证立即打印。 这意味着如果您将其用于调试目的,那么您无法保证它会在代码中完全发生。 如果你想确保它确实打印时你说它叫fflush(stdout)
。
注意:你通常不想使用fflush(stdout)
除非你正在调试,它真的是资源密集型,如果你关心速度性能,它有可能减慢你的速度。
我刚遇到另一个特例:
我的变量是:
line="-24 hours" line2="24 hours"
并尝试
printf $line printf $line2
两者都不会起作用。 第二个丢掉“小时”这个词,第一个丢错-24作为旗帜。
因此,每当我使用printf时,我会尽可能删除所有危险字符,方法是使用
sed -r "s/[/\ #;&~]/_/g"
我希望开发人员能够改进printf的代码。
照顾自己
当用户1214634表示stdout被缓冲并且仅在某些条件下打印到屏幕。 如果要强制打印,可以调用fflush(stdout)
我用了
puts(largeString);
因为在我的特殊情况下, printf()只是中途停止打印 。 整个字符串都在那里,它只是没有打印。
fflush(stdout)也没有修复它,下一行打印的另一个printf()就好了。