printf()和puts()在C中有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了printf()和puts()在C中有什么区别?相关的知识,希望对你有一定的参考价值。

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

puts()只是printf()的原始版本。它应该用于每个可能的printf()没有字符串插值?

答案

putsprintf更简单,但要注意前者会自动添加换行符。如果这不是你想要的,你可以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。然而,fwritestdoutputs工作得快得多。

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中有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中put()与puts()的区别?

fprintf和printf有啥区别吗?

printf,sprintf,vsprintf 区别

java中print和println的区别

HTTP中GET,POST和PUT的区别

C中的sprintf和printf有啥区别? [复制]