文字列の全体ではなく指定の長さだけ出力したい場合どうするか。
%.*s
と指定して、パラメータに長さ
(int
)、文字列
の順に与える:
int len = 4; |
文字列の長さが指定より短い場合には、文字列全体が出力される。
解説
*
で精度の引数指定
なぜ上記で指定できるのかというと %
以降に記述する指定子に *
というものがあり、 int
型を受け取り精度を指定できる。
例えば数値を指定の幅で出力したい場合に
printf("[%5d]", 123); // => [ 123] |
というところを、 *
指定子を使うと引数で指定できて
printf("[%*d]", 5, 123); // => [ 123] |
と書ける。
.
で文字列の最長指定
また文字列の場合、通常の幅指定だと所定の長さ以下の場合にスペースで埋める:
printf("[%5s]\n", "abc"); // => [ abc] |
が、浮動小数点数の小数点以下の精度の指定 %.2f
と同様に .
以下にも精度の指定ができて、その場合は最大の長さの制限になる(短い場合には影響なし):
printf("[%.5s]\n", "abc"); // => [abc] 指定より短いのですべてが出力される |
でこの小数点以下の精度指定も引数によって指定することで、上記のフォーマットとなる。
参考
- printf - C++ Reference
- printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s - cppreference.com
変換の精度指定:
.
に続く整数値または*
。*
が使用される場合、精度はint
型の追加引数で指定される。
精度
は出力される最大バイト数を指定する。精度
が指定されない場合、最初のヌルターミネートまでのすべてのバイトが出力される。