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 标志会导致值分别在值前加上0 、0x 或0X 。 |
, | 此标志会在 %d 和 %i 替换的输出中,左起每 3 位数字之间添加逗号分隔符。 这可以帮助人们更容易地辨别大整数值的大小。 例如,值 2147483647 使用 %d 将呈现为 2147483647,但使用%,d 将显示为 2,147,483,647 。 |
! | 这是alternate-form-2标志。对于字符串替换,此标志使宽度和精度以字符而不是字节来表示。对于浮点数替换,alternate-form-2 标志将显示的最大有效位数从 16 位增加到 26 位,强制显示小数点,并使小数点后至少出现一位数。 |