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