printf何时无法打印?

时间:2012-02-16 19:11:40

标签: c printf

c中的

printf函数并不总是在屏幕上打印输出。例如,如果您忘记将\ n放在字符串的末尾,那么您有时会得不到o / p。 printf无法打印时是否还有其他一些条件。我记得有人说有7个这样的条件。你能帮忙吗?

5 个答案:

答案 0 :(得分:20)

标准输出是一个缓冲流,除非输入换行符,流关闭或程序正常退出,否则不保证刷新。如果程序异常退出,则流可能不会刷新。标准输出是行缓冲的,这就是换行符冲洗它的原因。有些缓冲区不会刷新换行符。

答案 1 :(得分:8)

不是printf并不总是打印,而是保证不会立即打印。这意味着如果您将其用于调试目的,那么您无法保证它会在代码中完全发生。如果你想确保它在你说它打电话时确实打印出来 fflush(stdout)

注意:您通常不想使用fflush(stdout),除非您正在调试,它真的是资源密集型,如果您关心速度性能,它可能会减慢您的速度下来。

答案 2 :(得分:1)

我刚遇到另一个特例:

我的变数是:

line="-24 hours"
line2="24 hours"

并尝试

printf $line 
printf $line2

两者都不会起作用。 第二个是“小时”这个词,第一个是错误-24作为旗帜。

因此,每当我使用printf时,如果可能,我将使用

删除所有危险字符
sed -r "s/[/\ #;&~]/_/g"

我希望开发人员可以改进printf的代码。

小心

答案 3 :(得分:0)

由于user1214634表示stdout已缓冲,仅在某些条件下打印到屏幕。如果要强制打印,可以调用fflush(stdout)

答案 4 :(得分:0)

我用过

puts(largeString); 

因为在我的特定情况下, printf()刚刚中途停止打印。整个字符串在那里,它只是没有打印。

fflush(stdout)也没有解决它,下一行打印的另一个printf()就好了。