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是什么意思?
答案 0 :(得分:3)
1$
和2$
指定参数的位置。它仅由POSIX指定,不是C标准。
根据C标准,此处printf
的行为始终未定义,因为$
不是有效的printf
转换规范。
[...]格式字符串,包含转换的“%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$
需要另一个参数。