2017-05-26 13 views
4

もう1つの引数をprintfに渡して2回印刷します。引数を2回出力する

printf("%s%s","somestring");  // prints somestringsomestring 

これを行う方法はありますか?

+2

https://stackoverflow.com/questions/19327441/gcc-dollar-sign-in-printf-format-string – Barmar

+2

値を指定して、引数リストに2回指定してください –

+0

これは実際的な必要性ですか、これは理論的な質問ですか? – i486

答えて

8

あなたはシステムのように、Linuxや他のいくつかのUNIX上にある場合は、引数の数を指定する$を使用することができます。1$は「最初の引数を使用する」を意味し、この例では

printf("%1$s%1$s\n", "hello"); 

を。また、この構文を複数回使用するので、与えられた引数をより一度使用することができます。

Linux man page for printfは、より多くの詳細を与える:

引数は 変換指定子で(型プロモーションの後に)適切に対応している必要があります。既定では、引数は の順番で使用されます。それぞれの '*'と各変換指定子は、次の 引数を要求します(引数が不十分な場合は、 )。 '%'の代わりに「%m $」を書き、「」の代わりに「m $」を書くことで、どの引数が取られているかを明示的に指定することもできます。ここで、10進整数mしたがって、1から始まる をインデックス付け、所望の引数の引数リスト内 位置を示し、

printf("%*d", width, num); 

printf("%2$*1$d", width, num); 

は等価です。 2番目のスタイルでは、同じ引数を繰り返し指定することができます。 C99標準には、Single UNIX Specificationに由来する '$'、 を使用するスタイルは含まれていません。 '$' を使用するスタイルを使用する場合は、 引数とすべての幅と精度の引数を使用するすべてのコンバージョンで使用する必要がありますが、引数を消費しない "%%"形式の を混在させることができます。 '$'を使用して指定された引数の数には、 ギャップが存在しない可能性があります。たとえば、 引数1と3が指定されている場合、引数2も書式文字列のどこかに と指定する必要があります。あなたが保持する変数(あるいは可変引数リスト)を使用する必要がありますISO Cでは

+0

ありがとうございました。システムが私に許してくれます。 – DEADBEEF

+3

'' man 3 printf'にちょうど注意してください: "* C99標準には、Single UNIX Specificationに由来する '$'を使ったスタイルは含まれていません。*" –

+2

^つまり、これはPOSIX拡張です –

関連する問題