私は古典的な K&R を読んでいて、次の構文に遭遇しました。
printf("%.*s",max,s);
hereの意味は何"."
ですか? here を適用しない場合、"."
文字列全体が出力されますが、a を適用しない場合、"."
最大最大文字数が出力されます。
私は古典的な K&R を読んでいて、次の構文に遭遇しました。
printf("%.*s",max,s);
hereの意味は何"."
ですか? here を適用しない場合、"."
文字列全体が出力されますが、a を適用しない場合、"."
最大最大文字数が出力されます。
「文字列最大フィールド幅」を指定します
文字列形式内の精度は、フィールドの最大幅を指定します。
%2.6s
最小幅 2 文字、最大幅 6 文字を指定します。文字列が 6 文字を超える場合、切り捨てられます。
printf フォーマット文字列を使用すると、幅と精度を指定できます。
のような幅は、文字列の前にスペースを挿入して、文字列を 25 文字の幅にパディングするよう%25s
に指示します。printf
(文字列が 25 文字を超える場合でも、全体が出力されます。)
などの文字列形式に適用される「精度」は、出力される%.25s
文字列の長さを 25 文字に制限します。3 文字の文字列は完全に (パディングなしで) 印刷され、30 文字の文字列は最後の 5 文字が欠落します。
%.*s
形式の精度をハードコーディングするのを避け、代わりに への整数引数として指定printf
しますmax
。
まず、K&R は C の独自の実装であり、現在の仕様とは異なります。K&R C に関する特定の情報が必要な場合は、特定のドキュメントを参照してください。
現在の C 標準から:
(...) s 変換で書き込まれる最大バイト数を指定するオプションの精度。精度は、ピリオド (.) の後にアスタリスク * (後述) またはオプションの 10 進整数が続く形式を取ります。
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
同様のドキュメントは、複数の標準または実装についてオンラインでどこでも入手できます。
ドットは、フォーマット文字列が異なれば意味も異なります。%f で ab を使用すると、 b は length を返します。a は小数点以下の桁数を示します。%s で ab を使用すると、a は文字列の最小長を指定します。一方、b は印刷される文字列の最大長を示します。