I have a format string like this:
buf[] = \"A%d,B%d,C%d,D%d,F%d,G%d,H%d,I%d,J%d\";
and I want to insert the same integer for each %d<
There is no standard (i.e. portable) way of doing this.
Yes, you can use %1$d
everytime. The 1$
references the second argument, you could obviously do it with other arguments, too.
Demo: http://codepad.org/xVmdJkpN
Note that the position specifier is a POSIX extension - so it might not work with every single compiler. If you need it to work e.g. with the Visual C++ compiler, consider using the ugly way of repeating the argument or do not use a printf-style function at all. Another option would be using a POSIX-compatible sprintf implementation or using multiple calls to append one number everytime in a loop (in case the format string is built dynamically which would prevent you from specifying the correct number of arguments).
On a side-note, sprintf
should be avoided. Use snprintf(buf2, sizeof(buf2), ....)
instead. Of course this requires buf2
to have a static size known at compile-time - but if you allocate it manually you can simply use the variable containing the length instead of sizeof(buf2)
.