我有一个这样的格式字符串:
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
吗?
是的,您可以随时使用%1$d
。引用第二1$
个参数,你显然也可以用其他参数来做。
演示:http ://codepad.org/xVmdJkpN
请注意,位置说明符是 POSIX 扩展 - 因此它可能不适用于每个编译器。如果您需要它与 Visual C++ 编译器一起工作,请考虑使用重复参数的丑陋方式或根本不使用 printf 样式的函数。另一种选择是使用与 POSIX 兼容的 sprintf 实现或使用多个调用在循环中每次附加一个数字(如果格式字符串是动态构建的,这将阻止您指定正确数量的参数)。
在旁注中,sprintf
应该避免。改为使用snprintf(buf2, sizeof(buf2), ....)
。当然,这需要buf2
在编译时知道静态大小 - 但是如果您手动分配它,您可以简单地使用包含长度的变量而不是sizeof(buf2)
.
没有标准的(即便携的)方法可以做到这一点。