printf两次参数

DEA*_*EEF 9 c printf

我想传递一个额外的参数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开始索引.因此,

printf("%*d", width, num);
Run Code Online (Sandbox Code Playgroud)

和

printf("%2$*1$d", width, num);
Run Code Online (Sandbox Code Playgroud)

是等价的.第二种样式允许重复引用相同的参数.C99标准不包括使用'$'的样式,它来自Single UNIX Specification.如果使用'$'的样式,则必须在所有带有参数和所有宽度和精度参数的转换中使用它,但它可以与不使用参数的"%%"格式混合使用.使用'$'指定的参数数量可能没有差距; 例如,如果指定了参数1和3,则还必须在格式字符串中的某处指定参数2.

  • 只需注意每个`man 3 printf`:"*C99标准不包括使用'$'的样式,它来自Single UNIX Specification.*" (6认同)
  • ^换句话说,这是一个POSIX扩展 (4认同)
  • @0xBADC0DE 不,那行不通。格式字符串定义了以下参数。它不能以这种方式引用自身。 (2认同)