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

时间:2012-05-13 13:47:32

标签: c printf

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

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吗?

2 个答案:

答案 0 :(得分:17)

是的,您每次都可以使用%1$d1$引用第二个参数,显然你可以用其他参数来做。

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

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


另一方面,应该避免使用sprintf。请改用snprintf(buf2, sizeof(buf2), ....)。当然,这需要buf2在编译时获得静态大小 - 但如果手动分配它,您只需使用包含长度的变量而不是sizeof(buf2)

答案 1 :(得分:5)

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