C 语言 puts() 和 printf() 打印字符串的区别

2025 年 1 月 7 日 | 阅读 3 分钟

C语言头文件定义了 puts()printf() 函数,它们用于在控制台上打印字符串。在本文中,我们将讨论 C 语言中 puts() 和 printf() 方法的区别。但在讨论它们的区别之前,我们必须了解 puts() 和 printf() 方法。

puts() 函数是什么?

在将字符串写入控制台时,puts() 函数会自动附加一个换行符 "\n"

语法

它具有以下语法:

参数

str: 它接受一个以 null 结尾的字符串作为输入。

返回值

  • 如果发生错误,则返回文件结束符(End-of-File);如果成功输出,则返回一个非负值。

printf() 函数是什么?

除了将数据打印到控制台之外,printf() 方法还可以根据给定的格式字符串打印格式化数据。

语法

它具有以下语法:

参数

  • format_string:可以是纯字符串,也可以是带有格式说明符的字符串。
  • Arguments: 需要显示的值是变量名。 (此处原文可能存在翻译错误,通常指代格式字符串中 %s, %d 等对应的实际参数)

返回值

  • 否则,它会提供成功输入到控制台的字符数。

效率

  • Puts() 不需要格式化。因此,在打印字符串时,它通常更快、更有效。
  • 由于其格式化功能,printf() 比 puts() 有更高的处理开销,这可能导致简单字符串的输出略微变慢。

格式化

  • Puts() 打印字符串,后面跟着一个换行符;它不提供任何格式化。
  • Printf() 允许我们使用格式说明符来设置各种格式参数,包括对齐、字段宽度、精度等。

用途

  • Puts() 默认在字符串末尾添加换行符 \n,并且只能用于打印字符串。要打印的字符串是唯一需要的参数。
  • Printf() 是一个更灵活的函数,它可以打印字符串和其他数据类型,并管理不同的格式化样式。通过使用格式说明符,它允许更复杂的输出格式化。Printf() 可以使用 %s 格式说明符打印字符串。

以下两者应该优先选择哪个?

对于打印字符串,puts() 可能比 printf() 更可取,因为它通常开销更小(puts() 的实现通常比 printf() 简单),并且如果字符串包含像 '%s' 这样的格式字符,printf() 可能会产生意外的结果。此外,对用户输入的字符串 str 使用 printf() 可能导致安全问题。

请注意,puts() 会将光标移到下一行。

如果我们不希望光标移动到下一行,请使用以下 puts() 的变体。

fputs(str, stdout)

printf() 和 puts() 的主要区别

C 语言中的 printf()puts() 之间存在一些区别。这些函数的一些主要区别如下:

Difference between puts() and printf() for printing a string in C
printf()puts
Printf 可以使用格式说明符来打印格式化字符串。Puts 不支持格式化。
Printf 不会自动附加换行符。Puts 会自动附加一个换行符。
返回成功写入终端的字符数。如果失败,它返回 EOF(文件结束符);如果成功,它返回一个非负结果。
Printf 处理多个字符串的能力使得在输出中连接字符串更加容易。Puts 一次只能打印一个字符串。
Printf 能够打印多种数据类型。Puts 只能打印字符。

示例 1

输出

Difference between puts() and printf() for printing a string in C

示例 2

下面的 C 程序演示了 fputs 的用法。

输出

Difference between puts() and printf() for printing a string in C

示例 3

下面的 C 程序演示了在 printf() 函数中使用 %s 时出现的意外行为。

输出

Difference between puts() and printf() for printing a string in C