私はこのようなフォーマット文字列を持っています:
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
。参照は2番目の1$
引数を参照しますが、他の引数でも明らかに実行できます。
デモ:http ://codepad.org/xVmdJkpN
位置指定子はPOSIX拡張であるため、すべてのコンパイラーで機能するとは限らないことに注意してください。Visual C ++コンパイラなどで動作する必要がある場合は、引数を繰り返す醜い方法を使用するか、printfスタイルの関数をまったく使用しないことを検討してください。もう1つのオプションは、POSIX互換のsprintf実装を使用するか、複数の呼び出しを使用してループ内で毎回1つの数値を追加することです(フォーマット文字列が動的に構築されるため、正しい数の引数を指定できない場合)。
ちなみに、sprintf
避けるべきです。snprintf(buf2, sizeof(buf2), ....)
代わりに使用してください。もちろん、これにはbuf2
コンパイル時に既知の静的サイズが必要ですが、手動で割り当てる場合は、の代わりに長さを含む変数を使用できますsizeof(buf2)
。
これを行うための標準的な(つまりポータブルな)方法はありません。