如何将相同的变量多次打印到字符串中?

her*_*ian 13 c printf

我有一个像这样的格式字符串:

buf[] = "A%d,B%d,C%d,D%d,F%d,G%d,H%d,I%d,J%d";
Run Code Online (Sandbox Code Playgroud)

我想为每个插入相同的整数,%d所以我使用:

 int val = 6;
 sprintf(buf2, buf, val,val,val,val,val,val,val,val,val);
Run Code Online (Sandbox Code Playgroud)

我可以使用sprintf只需要我写val一次的方式,并将sprintf每个使用它%d吗?

Thi*_*ter 18

是的,你可以%1$d每次都使用.该1$引用的第二个参数,你可以明显地与其他参数做到这一点.

演示:http://codepad.org/xVmdJkpN

请注意,位置说明符是POSIX扩展名 - 因此它可能不适用于每个编译器.如果您需要使用它来使用Visual C++编译器,请考虑使用重复参数的丑陋方式或根本不使用printf样式函数.另一个选择是使用POSIX兼容的sprintf实现或使用多个调用每次在循环中附加一个数字(如果格式字符串是动态构建的,这将阻止您指定正确数量的参数).


在旁注,sprintf应该避免.请snprintf(buf2, sizeof(buf2), ....)改用.当然,这需要buf2在编译时获得静态大小 - 但如果手动分配它,则可以简单地使用包含长度的变量而不是sizeof(buf2).

  • @OliCharlesworth它显然是POSIX扩展:http://en.wikipedia.org/wiki/Printf_format_string#Custom_format_placeholders (3认同)

Oli*_*rth 6

没有标准(即便携式)方式.