20146

101 分钟

#C 语言标准库函数 printf

/********************************************* * @brief 向标准输出中进行输出 * @param format 格式字符串 * @param ... 可变长度参数,要打印的变量 * @return 打印的字符数量 ********************************************/ int printf(const char* restrict format, ...);

说明

向标准输出中进行输出。

参数

  • format - 格式化字符串,指向以空字符(\0)结尾的字符串指针,指定如何解释数据
    • 普通字符直接打印
    • 转义字符按照转义打印
    • % 开头的 格式占位符,按照指定格式打印后续相应位置的参数
  • ... - 可变长度参数,为要打印的变量,需要与 format 参数中的格式占位符一一对应

返回值

  • 成功时返回打印的字符数量
  • 失败时返回负值

#示例

#include <stdio.h> int main(void) { int x = 1024; float y = 3.1415926; char ch = '@'; char* text = "hello"; printf("x=%d, y=%f, ch=%c, text=%s\n", x, y, ch, text); return 0; }

运行结果:

x=1024, y=3.141593, ch=@, text=hello

#格式占位符

格式占位符以 %[标识][宽度][.精度][长度修饰]说明符 的形式出现。

  • 宽度:打印的宽度,内容不足时使用空格或 0 补全
  • 精度:小数点后显示的位数
  • 长度修饰:表示类型长度,例如 %dint,而 %ldlong
标识说明
-左对齐(默认是右对齐)
+有符号数始终显示符号(默认仅负数显示负号)
(空格)有符号数非负时开头添加空格
#使用替代转换,例如 %#x 会打印 0x 前缀
0前导 0 补全宽度
说明符
说明
参数类型hhhllljztL
%百分号(%)本身---------
c单个字符int--wint_t-----
s字符串,以空字符(\0)结尾char*--wchar_t*-----
d有符号十进制整数intsigned charshortlonglong longintmax_tptrdiff_t-
i有符号十进制整数,同 %dintsigned charshortlonglong longintmax_tptrdiff_t-
u无符号十进制整数unsigned intunsigned charunsigned shortunsigned longunsigned long longuintmax_tsize_tptrdiff_t-
o无符号八进制整数unsigned intunsigned charunsigned shortunsigned longunsigned long longuintmax_tsize_tunsigned ptrdiff_t-
x无符号十六进制整数,字母小写unsigned intunsigned charunsigned shortunsigned longunsigned long longuintmax_tsize_tunsigned ptrdiff_t-
X无符号十六进制整数,字母大写unsigned intunsigned charunsigned shortunsigned longunsigned long longuintmax_tsize_tunsigned ptrdiff_t-
f浮点数,字母小写double--double----long double
F浮点数,同 %fdouble--double----long double
e浮点数,科学计数法,字母小写double--double----long double
E浮点数,科学计数法,字母大写double--double----long double
g浮点数,省略小数末尾的 0,值较大时使用科学计数法,字母小写double--double----long double
G浮点数,省略小数末尾的 0,值较大时使用科学计数法,字母大写double--double----long double
a浮点数,十六进制,科学计数法,字母小写double--double----long double
A浮点数,十六进制,科学计数法,字母大写double--double----long double
p指针地址void*--------
n将当前已打印的字符数量写入参数中int*siged char*short*long*long long*intmax_t*ptrdiff_t*-

#特殊格式宏

由于 C 语言中类型的长度不是固定的。反过来说,固定长度的类型,其原始类型是不确定的。

例如 int32_t 在某些环境下是 int,另外某些环境下是 long;前者使用 printf 打印时应使用 %d,而后者应使用 %ld

为了方便,可以使用以下宏来标识格式。

printf 格式标准说明
PRId8C99printf 中用于打印 int8_td 格式(有符号十进制)
PRId16C99printf 中用于打印 int16_td 格式
PRId32C99printf 中用于打印 int32_td 格式
PRId64C99printf 中用于打印 int64_td 格式
PRIdPTRC99printf 中用于打印 intptr_td 格式
PRIdMAXC99printf 中用于打印 intmax_td 格式
PRIdFAST8C99printf 中用于打印 int_fast8_td 格式
PRIdFAST16C99printf 中用于打印 int_fast16_td 格式
PRIdFAST32C99printf 中用于打印 int_fast32_td 格式
PRIdFAST64C99printf 中用于打印 int_fast64_td 格式
PRIdLEAST8C99printf 中用于打印 int_least8_td 格式
PRIdLEAST16C99printf 中用于打印 int_least816_td 格式
PRIdLEAST32C99printf 中用于打印 int_least832_td 格式
PRIdLEAST64C99printf 中用于打印 int_least864_td 格式
PRIi8C99printf 中用于打印 int8_ti 格式(有符号十进制)
PRIi16C99printf 中用于打印 int16_ti 格式
PRIi32C99printf 中用于打印 int32_ti 格式
PRIi64C99printf 中用于打印 int64_ti 格式
PRIiPTRC99printf 中用于打印 intptr_ti 格式
PRIiMAXC99printf 中用于打印 intmax_ti 格式
PRIiFAST8C99printf 中用于打印 int_fast8_ti 格式
PRIiFAST16C99printf 中用于打印 int_fast16_ti 格式
PRIiFAST32C99printf 中用于打印 int_fast32_ti 格式
PRIiFAST64C99printf 中用于打印 int_fast64_ti 格式
PRIiLEAST8C99printf 中用于打印 int_least8_ti 格式
PRIiLEAST16C99printf 中用于打印 int_least816_ti 格式
PRIiLEAST32C99printf 中用于打印 int_least832_ti 格式
PRIiLEAST64C99printf 中用于打印 int_least864_ti 格式
PRIu8C99printf 中用于打印 uint8_tu 格式(无符号十进制)
PRIu16C99printf 中用于打印 uint16_tu 格式
PRIu32C99printf 中用于打印 uint32_tu 格式
PRIu64C99printf 中用于打印 uint64_tu 格式
PRIuPTRC99printf 中用于打印 uintptr_tu 格式
PRIuMAXC99printf 中用于打印 uintmax_tu 格式
PRIuFAST8C99printf 中用于打印 uint_fast8_tu 格式
PRIuFAST16C99printf 中用于打印 uint_fast16_tu 格式
PRIuFAST32C99printf 中用于打印 uint_fast32_tu 格式
PRIuFAST64C99printf 中用于打印 uint_fast64_tu 格式
PRIuLEAST8C99printf 中用于打印 uint_least8_tu 格式
PRIuLEAST16C99printf 中用于打印 uint_least816_tu 格式
PRIuLEAST32C99printf 中用于打印 uint_least832_tu 格式
PRIuLEAST64C99printf 中用于打印 uint_least864_tu 格式
PRIo8C99printf 中用于打印 uint8_to 格式(有符号八进制)
PRIo16C99printf 中用于打印 uint16_to 格式
PRIo32C99printf 中用于打印 uint32_to 格式
PRIo64C99printf 中用于打印 uint64_to 格式
PRIoPTRC99printf 中用于打印 uintptr_to 格式
PRIoMAXC99printf 中用于打印 uintmax_to 格式
PRIoFAST8C99printf 中用于打印 uint_fast8_to 格式
PRIoFAST16C99printf 中用于打印 uint_fast16_to 格式
PRIoFAST32C99printf 中用于打印 uint_fast32_to 格式
PRIoFAST64C99printf 中用于打印 uint_fast64_to 格式
PRIoLEAST8C99printf 中用于打印 uint_least8_to 格式
PRIoLEAST16C99printf 中用于打印 uint_least816_to 格式
PRIoLEAST32C99printf 中用于打印 uint_least832_to 格式
PRIoLEAST64C99printf 中用于打印 uint_least864_to 格式
PRIx8C99printf 中用于打印 uint8_tx 格式(有符号十六进制,小写)
PRIx16C99printf 中用于打印 uint16_tx 格式
PRIx32C99printf 中用于打印 uint32_tx 格式
PRIx64C99printf 中用于打印 uint64_tx 格式
PRIxPTRC99printf 中用于打印 uintptr_tx 格式
PRIxMAXC99printf 中用于打印 uintmax_tx 格式
PRIxFAST8C99printf 中用于打印 uint_fast8_tx 格式
PRIxFAST16C99printf 中用于打印 uint_fast16_tx 格式
PRIxFAST32C99printf 中用于打印 uint_fast32_tx 格式
PRIxFAST64C99printf 中用于打印 uint_fast64_tx 格式
PRIxLEAST8C99printf 中用于打印 uint_least8_tx 格式
PRIxLEAST16C99printf 中用于打印 uint_least816_tx 格式
PRIxLEAST32C99printf 中用于打印 uint_least832_tx 格式
PRIxLEAST64C99printf 中用于打印 uint_least864_tx 格式
PRIX8C99printf 中用于打印 uint8_tX 格式(有符号十六进制,大写)
PRIX16C99printf 中用于打印 uint16_tX 格式
PRIX32C99printf 中用于打印 uint32_tX 格式
PRIX64C99printf 中用于打印 uint64_tX 格式
PRIXPTRC99printf 中用于打印 uintptr_tX 格式
PRIXMAXC99printf 中用于打印 uintmaX_tX 格式
PRIXFAST8C99printf 中用于打印 uint_fast8_tX 格式
PRIXFAST16C99printf 中用于打印 uint_fast16_tX 格式
PRIXFAST32C99printf 中用于打印 uint_fast32_tX 格式
PRIXFAST64C99printf 中用于打印 uint_fast64_tX 格式
PRIXLEAST8C99printf 中用于打印 uint_least8_tX 格式
PRIXLEAST16C99printf 中用于打印 uint_least816_tX 格式
PRIXLEAST32C99printf 中用于打印 uint_least832_tX 格式
PRIXLEAST64C99printf 中用于打印 uint_least864_tX 格式

#推荐阅读

创建于 2025/6/23

更新于 2025/6/30