SQLite 内置打印 printf

发布时间 2023-11-11 11:15:36作者: txgh

SQLite 内置打印 printf

格式详细信息

printf() 的格式字符串是生成字符串的模板。 每当格式字符串中出现%字符时,就会进行替换。 %后跟一个或多个描述替换的附加字符。 每个替换都具有以下格式:

%[flags][width][.precision][length]type

所有替换都以单个%开头,并以单个类型字符结尾。 替换的其他元素是可选的。

要在输出中包括一个%字符,请在模板中放置两个连续的%字符。

替换类型 type

替换类型 含义
% 一行中的两个%字符在输出中被转换为一个%,而不替换任何值。
d, i 参数是一个带符号的整数,以十进制显示。
u 参数是一个无符号整数,以十进制显示。
f 参数是一个双精度值,以十进制显示。
e, E 参数是一个双精度值,以指数表示法显示。
g, G 参数是一个双精度值,它以普通十进制表示法显示,如果指数不接近零,则以指数表示法显示。
x, X 参数是一个以十六进制显示的整数。 小写十六进制用 %x 表示,大写用 %X 表示
o 参数是一个以八进制显示的整数。
s, z 参数是可以显示的字符串,也可以是作为空字符串的空指针。 %s%z 替换是相同的,NULL 参数被视为空字符串。
c 参数是一个字符串,从中提取并显示第一个字符。
p 参数是一个显示为十六进制地址的指针。%p 替换的效果类似于 %x
n 参数是一个指向整数的指针。 这种替换类型不会显示任何内容。 相反,参数指向的整数将会被%n左侧所有格式符号产生的字符串中的字符数覆盖,该字符串是由 %n 左侧的所有格式符号产生的。
q, Q 参数是一个字符串。 打印字符串时,所有单引号 ' 字符都会加倍,生成有效的 SQL 字符串文字。 %Q 替换类型还会在替换字符串的两端添加单引号。 如果 %Q 的参数是空指针,则输出是 NULL。 如果 %q 的参数是空指针,则不会生成任何输出。 因此,指向 %q 的空指针与空字符串相同。
w 替换的工作方式类似于 %q,只不过它将所有双引号字符 " 加倍,从而使结果适合在 SQL 语句中与双引号标识符名称一起使用。

可选长度字段 length

参数值的长度可以通过替换类型字母前的一个或多个字母来指定。 在 SQLite 中,长度仅对整数类型有效。 只有 ll 长度修饰符对 SQLite 有影响。 而且只有在使用 C 语言接口时才会产生影响。

可选宽度字段 width

宽度字段指定输出中替换值的最小宽度。 如果写入输出的字符串或数字短于宽度,则填充该值。 默认情况下,填充在左侧(值右对齐)。 如果使用 - 标志,则填充在右侧,值为左对齐。

默认情况下,宽度以字节为单位。 但是,如果存在 ! 标志,则宽度以字符为单位。 这只对多字节 utf-8 字符产生影响,并且仅在字符串替换时出现。

如果宽度是单个 * 字符而不是数字,则实际宽度值将从参数列表中作为整数读取。 如果读取的值为负,则宽度使用绝对值,并且该值将左对齐,就像存在 - 标志一样。

如果被替换的值大于宽度,则将完整值添加到输出中。 换句话说,宽度是值在输出中呈现的最小宽度。

可选精度字段 precision

精度字段(如果存在)必须紧跟在宽度之后,中间用一个 . 字符隔开。如果没有宽度,则精确度的.紧跟在标志(如果有)或首字母%之后。

对于字符串替换(%s%z%q%Q%w),精度是参数中使用的字节或字符数。默认情况下是字节数,但如果有!标记,则是字符数。如果没有精度,则替换整个字符串。 示例:%.3s替换参数字符串的前 3 个字节。 %!.3s替换参数字符串的前三个字符。

对于整数替换(%d%i%x%X%o%p),精度指定要显示的最小位数。必要时会加上前导零,以将输出扩展到最小位数。

对于浮点替换(%e%E%f%g%G),精度指定要显示在小数点右侧的位数。

对于字符替换 (%c),精度 N 大于 1 会导致字符重复 N 次。

如果精度是单个*字符而不是数字,则实际精度值将从参数列表中读取为整数。

选项标志字段 flags

标志由零个或多个字符组成,紧跟在引入替换的%之后。

标志 含义
- 左对齐输出中的值。 默认为右对齐。 如果宽度为零或小于被替换值的长度,标志不起作用。
+ 对于带符号的数字替换,在正数前加上+号。 无论标志设置如何,-号始终出现在负数前。
(space) 对于带符号的数字替换,在正数前添加一个空格。
0 根据需要在数字替换前添加尽可能多的0字符,以将值扩展到指定的宽度。 如果省略宽度字段,则此标记无效。
# 这是alternate-form-1标志。 对于 %g%G 替换,会删除尾部的零。 此标志强制所有浮点替换都显示小数点。 对于 %o%x%X 替换,alternate-form-1 标志会导致值分别在值前加上00x0X
, 此标志会在 %d 和 %i 替换的输出中,左起每 3 位数字之间添加逗号分隔符。 这可以帮助人们更容易地辨别大整数值的大小。 例如,值 2147483647 使用 %d 将呈现为 2147483647,但使用%,d将显示为 2,147,483,647
! 这是alternate-form-2标志。对于字符串替换,此标志使宽度和精度以字符而不是字节来表示。对于浮点数替换,alternate-form-2 标志将显示的最大有效位数从 16 位增加到 26 位,强制显示小数点,并使小数点后至少出现一位数。

参考

SQLite的内置打印()