我想传递一个额外的参数printf并打印两次,例如
printf("%s%s","somestring"); // prints somestringsomestring
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
dbu*_*ush 16
如果您使用的是Linux或其他类似UNIX的系统,则可以使用它$来指定参数编号:
printf("%1$s%1$s\n", "hello");
Run Code Online (Sandbox Code Playgroud)
在此示例中,1$表示"使用第一个参数".我们也多次使用这种语法,所以我们可以使用一次给定的参数.
在为Linux手册页printf提供了更多的细节:
参数必须与转换说明符正确对应(在类型提升后).默认情况下,参数按给定的顺序使用,其中每个'*'和每个转换说明符都要求下一个参数(如果给出的参数不够多,则会出错).还可以通过写"%m $"而不是'%'和" m $"而不是' ' 来明确指定在需要参数的每个地方采用哪个参数,其中十进制整数m表示在所需参数的参数列表,从1开始索引.因此,
Run Code Online (Sandbox Code Playgroud)printf("%*d", width, num);和
Run Code Online (Sandbox Code Playgroud)printf("%2$*1$d", width, num);是等价的.第二种样式允许重复引用相同的参数.C99标准不包括使用'$'的样式,它来自Single UNIX Specification.如果使用'$'的样式,则必须在所有带有参数和所有宽度和精度参数的转换中使用它,但它可以与不使用参数的"%%"格式混合使用.使用'$'指定的参数数量可能没有差距; 例如,如果指定了参数1和3,则还必须在格式字符串中的某处指定参数2.