我知道你可以用printf()和puts()进行打印。我还可以看到printf()允许您插入变量并进行格式化。

是puts()仅仅是printf()的原始版本。它是否应该用于所有可能的printf()而不进行字符串插值?


当前回答

Puts是一个简单的选择,它在最后添加一个新行,并从格式化的字符串中printfwrite输出。

关于看跌期权,请参阅文档 对于printf。

我建议只使用printf,因为这比切换方法更一致,也就是说,如果你正在调试,搜索所有printf比搜索puts和printf要少一些痛苦。大多数情况下,您也希望在打印输出中输出变量,因此puts主要用于示例代码中。

其他回答

除了格式化,如果成功,puts返回一个非负整数,如果不成功,则返回EOF;而printf返回打印的字符数(不包括后面的null)。

Puts是一个简单的选择,它在最后添加一个新行,并从格式化的字符串中printfwrite输出。

关于看跌期权,请参阅文档 对于printf。

我建议只使用printf,因为这比切换方法更一致,也就是说,如果你正在调试,搜索所有printf比搜索puts和printf要少一些痛苦。大多数情况下,您也希望在打印输出中输出变量,因此puts主要用于示例代码中。

printf可以被认为是一个更强大的版本。Printf提供了使用格式说明符(如%s, %d, %lf等)格式化输出变量的能力。

(Zan Lynx在评论中指出了这一点,但我认为它应该得到一个答案——考虑到公认的答案没有提到它)。

put (mystr)之间的本质区别;printf (mystr);在后者中,参数被解释为格式化字符串。如果字符串不包含任何控制字符(%),结果通常是相同的(除了添加换行符),但如果你不能依赖它(如果mystr是一个变量而不是文字),你就不应该使用它。

因此,将一个动态字符串作为printf的单个参数传递通常是危险的——而且在概念上是错误的:

char * myMessage;
// ... myMessage gets assigned at runtime, unpredictable content
printf(myMessage);  // <--- WRONG! (what if myMessage contains a '%' char?)
puts(myMessage);    // ok 
printf("%s\n",myMessage); // ok, equivalent to the previous, perhaps less efficient

同样适用于fputs vs fprintf(但fputs不添加换行符)。

Puts比printf简单,但注意前者会自动添加换行符。如果这不是你想要的,你可以fputs你的字符串到stdout或使用printf。