我一直试图了解如何使用printf函数对位置参数进行左对齐。
当我使用以下内容时,我没有错误:
printf("This is a %2$*1$s width var\n", 10, "ten");
但是,当我尝试使用左对齐标志时,出现错误:
printf("This is a %-2$*1$s width var\n", 10, "ten");
ex3.c:11:2: warning: unknown conversion type character ‘$’ in format [-Wformat=]
看起来似乎没有识别出标志,而是正在寻找参数“-2”。
我是否有办法在printf中格式化字符串以在仍使用位置参数的情况下破坏此问题?
谢谢,
答案 0 :(得分:2)
这是man printf
所说的内容(在使用glibc的系统上):
还可以通过编写
%m$
代替%
和*m$
来明确指定在需要参数的每个地方采用哪个参数*
,其中十进制整数m
表示所需参数的参数列表中的位置,从1开始编制索引。
或者,如果你更喜欢标准,Posix说:
每个转换规范由
'%'
字符或字符序列"%n$"
引入,之后按顺序出现以下内容......
换句话说,您不能将2$
放在格式中的任何位置。它需要在%
:
printf("This is a %2$-*1$s width var\n", 10, "ten");