PRINTF(1)

名称
printf - 引数をフォーマットに合わせて出力する

書式
printf format [arguments ...]

解説
printf は第 1 引数より後の引数をフォーマットに合わせて出力します。 format は 3 種類のオブジェクトを含む文字列です。 ひとつは、通常の文字で、単純に標準出力にコピーされます。 もうひとつはエスケープシーケンスで、変換されたあとで標準出力に コピーされます。もうひとつはフォーマット記述で、後に続く各 argument を表示します。

第 1 引数より後の arguments は対応するフォーマットが b または c または s の場合は文字列として扱われ、 これら以外の場合は以下のような拡張を伴った C の定数として扱われます:

•   先頭に ``+'' や ``-'' の符号をつけることができます。
•   もし先頭がシングルクォートやダブルクォートで始まっていれば、 その値は次の文字の ASCII コードになります。

フォーマット文字列は arguments を変換するために何度も再利用されます。 余分なフォーマット記述は 0 やヌル文字列として評価されます。

キャラクタのエスケープシーケンスは、 ansiC で定義されいるものと同一のバックスラッシュ表記を使います。 各キャラクタとその意味は以下のようになります:

\e  <エスケープ> キャラクタを書きます。

\a  <ベル> キャラクタを書きます。

\b  <バックスペース> キャラクタを書きます。

\f  <フォームフィード> キャラクタを書きます。

\n  <改行> キャラクタを書きます。

\r  <キャリッジリターン> キャラクタを書きます。

\t  <タブ> キャラクタを書きます。

\v  <垂直タブ> キャラクタを書きます。

\'  <シングルクォート> キャラクタを書きます。

\\  バックスラッシュキャラクタを書きます。

\num
    1 桁または 2 桁または 3 桁からなる 8 進数 num を ASCII コード値として持つ 8 ビットキャラクタを書きます。

各フォーマットの指定には先頭にパーセント文字 (``%'') がつきます。フォーマットの残りの部分は以下の順番で続きます:

以下のフラグが 0 個以上つきます:

    #   `#' キャラクタは数値を ``別の形式'' で表示することを明記したことになります。 c や d や s フォーマットに対してはこのオプションは何の影響も与えません。 o フォーマットの場合は最初に 0 をつけるため、その数の桁数が増えます。 x (X) フォーマットの場合、値が 0 でなければ出力される文字列の最初に 0x (0X) がつきます。 e, E, f, g, G のフォーマットでは、小数点以下の値がなくとも小数点が付加されます (通常は、小数点以下の値がある場合のみ、結果に小数点がつきます)。 g と G のフォーマットでは、結果の終わりに付く 0 は通常のフォーマットと違って 省略されません。

    -   指定したフィールド幅で 左詰め で出力します。

    +   符号つきのフォーマットの場合に、数字の前に常に符号がつくようになります。

    ‘ ’ 符号つきのフォーマットで正の値を表示する時に先頭に空白が 1 つつきます。`+' と空白が両方指定された場合は `+' が 空白より優先されます。

    0   `0' は、空白でパディングする代りに `0' でパディングを行います。 `-' と `0' が両方指定された場合は `-' が `0' より優先されます。

フィールド幅:
    フィールド幅 を指定するための、省略可能な数字です。 出力する文字列がこのフィールド幅よりも短い場合、 フィールド幅を満たすように左側を空白で埋めます (左詰めの指示があれば、右側を空白で埋めます。 また、0 フラグがついていれば 0 で埋められます)。

精度: 省略可能なピリオド ‘’. とその後に続く省略可能な数字の文字列で精度を指定することが出来ます。この数字は e フォーマットと f フォーマットの場合は小数点以下の値を何桁で表示するかという桁数になります。 これ以外の場合は表示する文字数の最小値として扱われます。 ピリオドの後に数字がない場合は精度は 0 として扱われます。

フォーマット:
    フォーマットの型を表す文字です (diouxXfwEgGbcs のうちのいずれかです)。

フィールド幅や精度には、数字の代りに ‘*’ も使えます。この場合はフィールド幅や精度は argument から供給されます。

フォーマットキャラクタとその意味は以下のようになります:

diouXx
    argument はそれぞれ符号つき 10 進数 (d もしくは i)、 符号なし 8 進数 (o)、符号なし 10 進数 (u)、 符号なし 16 進数 (X もしくは x) で表示されます。

f   argument が [-]ddd.ddd のスタイルで表示されます。 ここで、小数点以下の d の数は、その引数の精度が表現する個数となります。 精度が指定されなかった場合は 6 文字出力されます。 もし精度が明示的に 0 と指定された場合は小数点とそれ以下の値は表示されません。

eE  argument が e スタイル [-]d.ddde\*(Pmdd で表示されます。 小数点の前は数字が 1 つで、その後はその引数の精度が表現する個数だけ 数字が出ます。精度が指定されなかった場合は 6 文字出力されます。 大文字の E の場合は `E' フォーマットが使われます。

gG  argument を、 f または e で表示します。 いずれの形式が選ばれるかは、どちらが最小の長さで最大の精度が得られるか で決まります。

b   argument の文字列をバックスラッシュ-エスケープシーケンス の拡張を施したうえで表示します。

c   argument の最初の文字が表示されます。

s   argument の文字列を表示します。もし精度が指定されていれば、 その個数まで表示されます。精度が 0 かもしくは指定されていない場合は 文字列内の全ての文字が表示されます。

%   `%' を表示します。引数は消費されません。

存在しないフィールド、もしくは小さなフィールド幅指定でフィールドが切り詰め られることはありません。指定されたフィールドが実際の幅を越えた時にだけ パディングが起こります。

戻り値
printf は成功時には 0 を返し、失敗時には 1 を返します。

関連項目
echo(1), printf(3)

規格
printf ユーティリティは p1003.2-92 準拠です。

バグ
浮動小数点数は ASCII コードから浮動小数点に変換され、それからもう一度戻されるので、精度が落ちる 可能性があります。