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()就好了。