“%1 $ d”输出是什么意思?

时间:2019-05-30 06:58:27

标签: c ubuntu

im使用ubuntu运行此代码。但是代码是什么意思?

运行ubuntu代码: gcc name.c -o name

/名称

#include <stdio.h>
int main(void)
{
  printf("%d %1$d %2$d",5);
}

输出为“ 5 5随机数”。那么,%2 $ d是什么意思?

1 个答案:

答案 0 :(得分:3)

1$2$指定参数的位置。它仅由POSIX指定,不是C标准。

根据C标准,此处printf的行为始终未定义,因为$不是有效的printf转换规范。

根据fprintf posix

  

[...]格式字符串,包含转换的“%n $”形式   规格,字段宽度或精度可以由   序列“ * m $”,其中m是范围内的十进制整数   [1,{NL_ARGMAX}]给出参数列表中的位置(   格式参数)包含字段宽度或   精度,例如:

     

printf(“%1 $ d:%2 $。* 3 $ d:%4 $。* 3 $ d \ n”,小时,分钟,精度,秒);

所以:

printf("%d %1$d %2$d",5);
  • %d-指定下一个 int 参数应转换为带符号的十进制。
  • %1$d-指定格式字符串 int 后的 first 应该转换为带符号的十进制
  • %2$d-指定格式字符串 int 参数后的 second 应该转换为带符号的十进制

您仅给printf函数提供了两个参数(格式字符串和5)。结果不确定,因为2$需要另一个参数。