printf()和puts()在C中有什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了printf()和puts()在C中有什么区别?相关的知识,希望对你有一定的参考价值。
我知道你可以用printf()
和puts()
打印。我还可以看到printf()
允许您插入变量并进行格式化。
puts()
只是printf()
的原始版本。它应该用于每个可能的printf()
没有字符串插值?
puts
比printf
更简单,但要注意前者会自动添加换行符。如果这不是你想要的,你可以fputs
你的字符串到stdout或使用printf
。
当比较puts()
和printf()
时,即使他们的记忆消耗几乎相同,puts()
与printf()
相比需要更多时间。
(Zan Lynx在评论中指出了这一点,但我认为它应该得到一个aswer - 因为接受的答案没有提到它)。
puts(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
",myMessage); // ok, equivalent to the previous, perhaps less efficient
这同样适用于fputs
vs fprintf
(但fputs
不添加换行符)。
除格式化外,puts
如果成功则返回非负整数,如果不成功则返回EOF
;而printf
返回打印的字符数(不包括尾随空值)。
在简单的情况下,编译器将对printf()
的调用转换为对puts()
的调用。
例如,以下代码将编译为我接下来显示的汇编代码。
#include <stdio.h>
main() {
printf("Hello world!");
return 0;
}
push rbp
mov rbp,rsp
mov edi,str.Helloworld!
call dword imp.puts
mov eax,0x0
pop rbp
ret
在这个例子中,我使用GCC版本4.7.2并使用gcc -o hello hello.c
编译源代码。
根据我的经验,无论格式字符串如何,printf()
都会使用比puts()
更多的代码。
如果我不需要格式化,我不使用printf
。然而,fwrite
到stdout
比puts
工作得快得多。
static const char my_text[] = "Using fwrite.
";
fwrite(my_text, 1, sizeof(my_text) - sizeof(' '), stdout);
注意:每个注释,' 0'是一个整数常量。如评论所示,正确的表达式应该是sizeof(char)
。
对,printf
可以被认为是更强大的puts
版本。 printf
提供了使用格式说明符(如%s
,%d
,%lf
等)格式化输出变量的功能。
int puts(const char *s);
puts()将字符串s和尾部换行符写入stdout。
int printf(const char *format, ...);
函数printf()在格式字符串的控制下将输出写入stdout,格式字符串指定后续参数如何转换为输出。
我将借此机会请您阅读文档。
printf()函数用于将字符串和变量都打印到屏幕上,而puts()函数只允许您将字符串打印到屏幕上。
puts是一个简单的选择,最后添加一个新行,printf从格式化的字符串中写入输出。 put的文档:http://linux.die.net/man/3/puts和printf:http://linux.die.net/man/3/printf
我建议只使用printf,因为这比切换方法更一致,即如果你正在进行调试,搜索所有printfs比使用print和printf更不痛苦。大多数情况下,您也希望在打印输出中输出变量,因此put主要用于示例代码中。
以上是关于printf()和puts()在C中有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章