14

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

buf[] = "A%d,B%d,C%d,D%d,F%d,G%d,H%d,I%d,J%d";

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

 int val = 6;
 sprintf(buf2, buf, val,val,val,val,val,val,val,val,val);

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

4

2 回答 2

19

是的,您可以随时使用%1$d。引用第二1$个参数,你显然也可以用其他参数来做。

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

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


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

于 2012-05-13T13:49:13.540 回答
6

没有标准的(即便携的)方法可以做到这一点。

于 2012-05-13T13:56:29.353 回答