web-dev-qa-db-ja.com

%* s形式指定子の意味は何ですか?

維持しなければならないコードの中に、フォーマット指定子%*s。誰がこれが何であり、なぜ使用されるのか教えてもらえますか?

その使用例は次のとおりです。

fprintf(outFile, "\n%*s", indent, "");
42
Aamir

フィールドの幅を動的に指定するために使用されます

  • 幅はフォーマット文字列では指定されませんが、フォーマットする必要がある引数に先行する追加の整数値引数として指定されます。

そのため、「インデント」は、パラメータリストでそれに続く文字列に割り当てる領域を指定します。

そう、

printf("%*s", 5, "");

と同じです

printf("%5s", "");

これは、ループを回避して、ファイルにスペースを入れる良い方法です。

51
akappa

NULLで終了(パック)されていないバッファーでは「%* s」を使用しないでください。「length」フィールドのみが出力されると考えられます。

9
user2132064

* fprintfは、出力がn文字幅になるまで出力を埋め込みます。ここで、nは、変更された型で表されるa引数の直前に格納された整数値です。

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
1
jitter

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

幅はフォーマット文字列では指定されませんが、フォーマットする必要がある引数に先行する追加の整数値引数として指定されます。

例:printf("%*s", 4, myValue);printf("%4s", myValue);と同等です。

1
pauldoo

書式指定子%4sは、フィールド幅4の文字列を出力します。つまり、printfは少なくとも4文字の位置で値を表示します。

出力される値がlessで、4文字位置よりも広い場合、値はright justifiedはデフォルトでフィールドにあります。

値がgreaterで4文字位置よりも広い場合、フィールド幅expandsは適切な文字数に対応します。

値を左揃えするには、負の整数を使用してフィールド幅を指定します。

参照: Java™How To Program(初期オブジェクト)、第10版

1