1 .\" Copyright (c) 1999 Andries Brouwer (aeb@cwi.nl)
3 .\" This is free documentation; you can redistribute it and/or
4 .\" modify it under the terms of the GNU General Public License as
5 .\" published by the Free Software Foundation; either version 2 of
6 .\" the License, or (at your option) any later version.
8 .\" The GNU General Public License's references to "object code"
9 .\" and "executables" are to be interpreted as the output of any
10 .\" document formatting or typesetting system, including
11 .\" intermediate and printed output.
13 .\" This manual is distributed in the hope that it will be useful,
14 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
15 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 .\" GNU General Public License for more details.
18 .\" You should have received a copy of the GNU General Public
19 .\" License along with this manual; if not, write to the Free
20 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
24 .\" Earlier versions of this page influenced the present text.
25 .\" It was derived from a Berkeley page with version
26 .\" @(#)printf.3 6.14 (Berkeley) 7/30/91
27 .\" converted for Linux by faith@cs.unc.edu, updated by
28 .\" Helmut.Geyer@iwr.uni-heidelberg.de, agulbra@troll.no and Bruno Haible.
30 .\" 1999-11-25 aeb - Rewritten, using SUSv2 and C99.
31 .\" 2000-07-26 jsm28@hermes.cam.ac.uk - three small fixes
32 .\" 2000-10-16 jsm28@hermes.cam.ac.uk - more fixes
34 .\" Japanese Version Copyright (c) 1997 YOSHINO Takashi all rights reserved.
35 .\" Translated 1998-02-17, YOSHINO Takashi <yoshino@civil.jcn.nihon-u.ac.jp>
36 .\" Updated 2000-10-02, Kentaro Shirakata <argrath@ub32.org>
37 .\" Updated 2001-01-29, Kentaro Shirakata <argrath@ub32.org>
38 .\" Updated 2002-01-03, Kentaro Shirakata <argrath@ub32.org>
39 .\" Updated 2002-10-17, Kentaro Shirakata <argrath@ub32.org>
40 .\" Updated 2005-03-15, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
41 .\" Updated 2006-07-20, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
42 .\" Updated 2008-02-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.77
43 .\" Updated 2009-03-03, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.19
45 .\" WORD: conversion specifier 変換指定子
46 .\" WORD: length modifier 長さ修飾子
48 .TH PRINTF 3 2011-09-28 "GNU" "Linux Programmer's Manual"
50 printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,
51 vsnprintf \- 指定された書式に変換して出力を行う
55 .BI "int printf(const char *" format ", ...);"
57 .BI "int fprintf(FILE *" stream ", const char *" format ", ...);"
59 .BI "int sprintf(char *" str ", const char *" format ", ...);"
61 .BI "int snprintf(char *" str ", size_t " size ", const char *" format ", ...);"
63 .B #include <stdarg.h>
65 .BI "int vprintf(const char *" format ", va_list " ap );
67 .BI "int vfprintf(FILE *" stream ", const char *" format ", va_list " ap );
69 .BI "int vsprintf(char *" str ", const char *" format ", va_list " ap );
71 .BI "int vsnprintf(char *" str ", size_t " size ", const char *" format \
76 .RB ( feature_test_macros (7)
84 _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _ISOC99_SOURCE ||
85 _POSIX_C_SOURCE\ >=\ 200112L;
125 には文字列を終端する NULL バイト (\(aq\e0\(aq) もを含まれる)。
136 の各関数と等価であり、可変数引き数の代わりに
138 を引き数として呼び出される点だけが異なる。
156 の可変長引き数機構を使ってアクセスできる引き数)
157 をどのように変換して出力するかを指定する。
159 C99 と POSIX.1-2001 では、
164 の呼び出しで、範囲が重複するオブジェクト間でコピーが発生する場合の
165 結果は不定であると規定されている (例えば、出力先の文字列と入力された
166 引き数の一つが同じバッファを参照している場合などである)。
169 成功時には、上記の関数は書き込まれた文字数を返す
170 (文字列の最後を示すために使用する NULL バイトは数に含まれない)。
179 には文字列を終端する NULL バイト (\(aq\e0\(aq) も含まれる)。
180 この制限によって出力が切り詰められた場合には、
181 もし十分なスペースがあれば書き込まれたであろう文字の個数
182 (文字列を終端する NULL バイトを除く) を返す。
185 以上だった場合、出力が切り詰められたことを意味する
191 (もしあるなら) 初期シフト状態で始まり、初期シフト状態で終わる。
192 フォーマット用の文字列は 0 個以上の命令 (directives) によって構成される。
193 命令には、通常文字と変換指定 (conversion specifications) がある。
196 以外の文字で、出力ストリームにそのままコピーされる。
197 変換指定は、それぞれが 0 個以上の引き数を取る。
201 .I "変換指定子 (conversion specifier)"
212 引き数は (型の格上げの後は) 変換指定子が表す型と正確に対応しなければならない。
213 デフォルトでは、\(aq*\(aq や変換指定子が出てくる毎に次の引き数を要求され、
215 (指定された引き数の個数が不十分ならエラーとなる)。
216 また、引き数が必要な箇所で \(aq%\(aq の代わりに "%m$"、
217 \(aq*\(aqの代わりに "*m$" と書くことで、
218 明示的にどの引き数を使用するかを指定することもできる。
219 ここで 10進の整数 m は希望の引き数の引き数リストでの位置を示す
225 printf("%*d", width, num);
227 printf("%2$*1$d", width, num);
232 二番目の書き方では同じ引き数を繰り返し参照することができる。
233 C99 標準には、 Single UNIX Specification 由来の \(aq$\(aq を使った書き方は含まれていない。
234 \(aq$\(aq を使ったスタイルを使うと、引き数を取る変換及び幅と精度の引き数を
235 全てこのスタイルで指定しなければならないが、
236 引き数を消費しない "%%" フォーマットと混ざっているかもしれない。
237 \(aq$\(aq で指定される引き数の番号に空きがあってはならない。
238 例えば、もし引き数 1 と 3 が指定されると、引き数 2 もフォーマット文字列のどこかで
241 数値変換には小数点や 1000 単位の区切り文字を使うものもある。
245 POSIX ロケールでは小数点に \(aq.\(aq を用い、
251 printf("%\(aq.2f", 1234567.89);
255 は、 POSIX ロケールでは "1234567.89" 、 nl_NL ロケールでは "1234567,89"、
256 da_DK ロケールでは "1.234.567,89" となる。
258 % 文字の後ろには 0 個以上のフラグ文字が続く。
263 変換の場合、(先頭文字が 0 になっていない場合に先頭に 0 を追加することで)
268 変換の場合、数値が 0 でないときには文字列 "0x"
270 変換の場合には "0X") が前に付与される。
281 (通常は、小数点の後に数字が続く場合にのみ、
286 変換の場合、他の変換とは異なり、末尾のゼロが変換結果から削除されない。
305 変換では、変換した値の左側を空白文字の代わりにゼロで埋める。
329 左側ではなく右側を空白文字やゼロで埋められる。
339 符号付き変換で生成された正の数字の前に空白 (または空文字列) が置かれる。
342 符号付き変換によって出力される数字の前に、常に符号 (+ か \-) が置かれる。
343 デフォルトでは、符号は負の数字の場合のみ付与される。
350 上記の 5 つのフラグは C 標準で定義されている。
351 SUSv2 では、さらにもう一つフラグ文字が規定されている。
362 において、ロケール情報に指定があれば 1000 単位の区切り文字を出力する。
364 の多くのバージョンは、このオプションを解釈することができず、
366 %\(aqF は SUSv2 には含まれていない。
368 glibc 2.2 では、さらに一つフラグ文字が追加されている。
375 において、ロケールの代替出力数字があれば、それを用いて出力する。
376 例えば、 glibc 2.2.3 以降では、ペルシア ("fa_IR") ロケールで
377 アラビア数字 (Arabic-Indic digits) を出力できる。
378 .\" ロケールファイルには outdigits というキーワードがある。
380 最小のフィールド幅を指定する 10進数の数値文字列 (文字列の最初の文字は
382 変換された値の文字数がフィールド長よりも少ない場合、
384 (左揃えのフラグがある場合は右側を埋める)。
385 10進数の文字列の代わりに "*" や "*m$" (\fIm\fP は 10進整数) を書くこともできる。
386 "*" と "*m$" はそれぞれ、次の引き数と \fIm\fP 番目の引き数をフィールド幅として
391 \(aq\-\(aq フラグと正の数のフィールド幅として扱われる。
392 フィールド幅が小さかったり指定がなかったりしても、フィールドが切り詰められる
393 ことはない。もし変換結果がフィールド幅よりも広かった場合、
394 フィールドは変換結果が入る幅に広げられる。
396 オプションである精度は、ピリオド (\(aq.\(aq) とそれに続く10進数という
397 形式で指定する (10進数はオプション) 。
398 10進数の文字列の代わりに "*" や "*m$" (m は 10 進整数)を書くこともできる。
399 "*" と "*m$" はそれぞれ、次の引き数と m 番目の引き数を精度として
403 精度として \(aq.\(aq だけが指定されたり、精度が負の数だった場合、
411 変換では、表示される最小の桁数を指定する。
418 変換では、小数点以下に表示される数字の桁数を指定する。
426 変換では、文字列から出力される最大文字数を指定する。
452 .I unsigned short int
463 .IR "unsigned long int" 、
481 .I unsigned long long int
500 (C99 では %LF を使うことを認めているが、SUSv2 では認められていない。)
503 ("quad"。 4.4BSD と Linux libc5 のみ有効。使ってはならない。)
520 (Linux libc5 では、これを指定するのに
529 SUSv2 で長さ修飾子として使用できるのは、
560 引き数を符号付き 10 進表記に変換する。
561 精度指定があれば、精度で指定した桁数は必ず出力される。変換後の値が
562 指定された桁数に足りない場合は、左側が 0 で埋められる。
564 0 を表示しようとした時に、明示的に精度として 0 が指定されていると、
567 .BR o ", " u ", " x ", " X
587 精度指定があれば、精度で指定した桁数は必ず出力される。変換後の値が
588 指定された桁数に足りない場合は、左側が 0 で埋められる。
593 .if \w'\*(Pm'=0 .ds Pm \(+-
594 .RB [\-]d \&. ddd e \\*(Pmdd
596 小数点の前には一桁の数字があり、小数点以下の桁数は精度で指定された
597 桁数になる。精度は指定されなかった場合 6 とみなされる。
598 精度が 0 の場合には、小数点以下は表示されない。
606 つまり、指数の値が 0 の場合には、00 と表示される。
613 小数点の後の桁数は、精度で指定された値となる。
614 精度が指定されていない場合には 6 として扱われる。
615 精度として明示的に 0 が指定されたときには、小数点以下は表示されない。
616 小数点を表示する際には、小数点の前に少なくとも一桁は数字が表示される。
620 は規定されておらず、無限や NaN に関する文字列表現を
624 変換では、無限は "[\-]inf" か "[\-]infinity" と表示し、
625 NaN は文字列の先頭に `nan' をつけて表示するように規定されている。
627 変換の場合は "[\-]INF", "[\-]INFINITY", "NAN*" と表示される。)
642 精度が指定されない場合は、6桁とみなされる。
644 変換される値の指数が、 \-4 より小さいか、精度以上の場合に、
647 変換された結果の小数部分の末尾の 0 は削除される。小数点が表示されるのは、
648 小数点以下に数字が少なくとも一つある場合にだけである。
651 (C99 にはあるが SUSv2 にはない)
655 引き数を (abcdef の文字を使って)
656 .RB [\-] 0x h \&. hhhh p \\*(Pmd;
664 小数点の前には 1桁の16進数が置かれ、小数点の後ろの桁数は
666 デフォルトの精度は、その値が 2進数で正確に表現できる場合には、
667 その値を正確に表現できる桁数となる。それ以外の場合は、
670 .\" motoki 2005/03/19: 合っているかな?
671 小数点の前の数字は、正規化されていない数の場合はいくつになるか分からない。
672 正規化された数の場合は、 0 以外の値になるが、いくつになるかは分からない。
680 に変換して、その結果に対応する文字を出力する。
686 関数を初期シフト状態で呼び出してマルチバイト文字列に変換し、
694 型で文字型の配列へのポインタ (文字列へのポインタ) であることが
695 期待されている。配列中の文字は、終端の NULL バイト (\(aq\\0\(aq)
696 が出てくるまで出力される (終端文字は出力されない)。
697 精度が指定されていると、指定された字数以上は出力されない。
698 精度が指定された場合には、終端バイトが存在する必要はない。
699 精度が指定されていなかったり、精度の値が配列の大きさより大きい場合には、
700 配列は終端の NULL バイトを含んでいなければならない。
706 型でワイド文字の配列へのポインタであることが期待されている。
709 を呼び出して) マルチバイト文字に変換される
712 のシフト状態を初期状態に戻してから変換は行われる)。
713 マルチバイト文字への変換は、文字列を終端する NULL ワイド文字が
714 出てくるまで行われ、終端 NULL ワイド文字も含めて変換される。
715 結果のマルチバイト文字列は、終端の NULL バイトが出てくるまで
716 出力される (終端の NULL バイトは出力されない)。
717 精度が指定された場合、指定されたバイト数以上には出力されない。
718 但し、マルチバイト文字の一部分だけが出力されることはない。
719 精度は「バイト」数を指定するものであり、「ワイド文字」数や
720 「画面での位置」を指定するものではないことに注意。
721 精度が指定されていて、さらに出力が配列の末尾に達する前に出力バイト数が
722 精度の値を超える場合だけは、配列は NULL ワイド文字で終端されていなくてもよい。
723 それ以外の場合は、必ず配列は NULL ワイド文字で終端されていなければならない。
726 (C99 にはないが SUSv2 にはある)
731 (C99 にはないが SUSv2 にはある)
746 (または類似の型) のポインタ引き数が指す整数に保存する。
755 \(aq%\(aq 文字を出力する。変換される引き数は無い。
764 関数は、C89 と C99 に準拠している。
772 SUSv2 と C99 標準は互いに矛盾している。
777 で呼び出された場合、 1 未満の値を何か返り値とするように規定している。
780 を NULL とし、返り値として (通常通り) 出力バッファが十分な大きさが
781 あった場合に出力されるであろう文字数を返す。
783 Linux libc4 では、 5 つの C 標準のフラグ、
784 長さ修飾子 \fBh\fP, \fBl\fP, \fBL\fP、変換
785 \fBc\fP, \fBd\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP,
786 \fBg\fP, \fBG\fP, \fBi\fP, \fBn\fP, \fBo\fP, \fBp\fP,
787 \fBs\fP, \fBu\fP, \fBx\fP, \fBX\fP
789 但し \fBF\fP は \fBf\fP と同義である。
790 また、 \fBD\fP, \fBO\fP, and \fBU\fP を \fBld\fP, \fBlo\fP, and \fBlu\fP
792 (これはまずい仕様で、 後に \fB%D\fP の対応が打ち切られた時に深刻なバグを
793 引き起こした)。ロケール依存の小数点、1000 区切り、 NaN と無限、
796 Linux libc5 では、 5 つの C 標準のフラグと \(aq フラグ、ロケール、
798 また、長さ修飾子 \fBh\fP, \fBl\fP, \fBL\fP, \fBZ\fP, iand \fBq\fP が使えるが、
799 \fBL\fP と \fBq\fP は両方とも
800 \fIlong double\fP と \fIlong long int\fP に対応している (これはバグである)。
801 現在では変換 \fBF\fP, \fBD\fP, \fBO\fP, \fBU\fP は認識されないが、変換文字
807 glibc 2.0 では、変換文字 \fBC\fP と \fBS\fP が追加された。
809 glibc 2.1 では、長さ修飾子 \fBhh\fP, \fBj\fP, \fBt\fP, \fBz\fP
810 と変換文字 \fBa\fP, \fBA\fP が追加された。
812 glibc 2.2 では、 C99 で規定された意味での変換文字 \fBF\fP と
813 フラグ文字 \fBI\fP が追加された。
817 に追加するのに、軽率にも次のようなコードを使っているプログラムがある。
819 sprintf(buf, "%s some further text", buf);
826 の呼び出しにおいて、コピー元とコピー先のバッファが重なっていた場合の
828 .\" http://sourceware.org/bugzilla/show_bug.cgi?id=7075
831 のバージョンや指定したコンパイラのオプション次第では、
832 上記のような呼び出しで、期待した結果が得られ「ない」ことがある。
838 の実装は、バージョン 2.1 以降は C99 標準に準拠しており、
840 glibc 2.0.6 までは、出力が切り詰められた場合は \-1 を返す。
846 .\" の 3 つの関数と、フラグ \-、幅と精度での *、長さ修飾子 l、
847 .\" 変換 doxfegcsu、そして ld,ld,lu,lx の同義語として D,O,U,X が定義されている。
848 .\" 2.9.1BSD でもこれは同じだったが、 2.10BSD では
849 .\" フラグ #, +, 空白が追加され、 D,O,U,X については記載されなくなった。
854 .\" が追加され、 D,O,U,X を使わないように警告された。
855 .\" 4.3BSD Reno ではフラグ 0、長さ修飾子 h と L、
856 .\" 変換 n, p, E, G, (現在の意味での) X が追加され、
857 .\" D,O,U は非推奨扱いとなった。
860 .\" .BR vsnprintf ()、
872 .\" があり、これらはストリームではなくファイルディスクリプタに出力する。
877 は勝手に十分に長い文字列領域があると仮定するので、呼び出し側は
878 実際の領域からあふれないように注意しなければならない。
879 しかし、これを保証することが不可能な場合が多い。
880 生成される文字列の長さはロケール依存であり、予測が難しいことに注意。
893 はないが、 libbsd が提供されており、
903 を使うと、深刻なセキュリティ問題を引き起こすことがある。
906 のようなコードはしばしばバグを引き起こす。
909 に % 文字が含まれてるかもしれないからである。
911 が信頼できないユーザー入力から作られている場合には、
912 その中に \fB%n\fP が含まれていることがあり、
915 セキュリティーホールを作ることになるかもしれない。
917 .\".\"O Some floating-point conversions under early libc4
918 .\".\"O caused memory leaks.
919 .\"初期の libc4 での実数変換にはメモリリークを引き起こすことがある。
921 .if \w'\*(Pi'=0 .ds Pi pi
928 fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0));
932 日付と時間を "Sunday, July 3, 10:02" の形式で出力する。
941 fprintf(stdout, "%s, %s %d, %.2d:%.2d\en",
942 weekday, month, day, hour, min);
946 日 - 月 - 年 の順序で表示を行う国も多い。
953 fprintf(stdout, format,
954 weekday, month, day, hour, min);
959 はロケールに依存しており、引き数の順番を変えることもできる。
965 "%1$s, %3$d. %2$s, %4$d:%5$.2d\en"
969 であれば、 "Sonntag, 3. Juli, 10:02" という結果になる。
971 十分に大きな文字列領域を確保して、そこにメッセージを格納するには
972 (glibc 2.0 と glibc 2.1 の両方で正しく動作するコード):
979 make_message(const char *fmt, ...)
982 int size = 100; /* Guess we need no more than 100 bytes. */
986 if ((p = malloc(size)) == NULL)
991 /* Try to print in the allocated space. */
994 n = vsnprintf(p, size, fmt, ap);
997 /* If that worked, return the string. */
999 if (n > \-1 && n < size)
1002 /* Else try again with more space. */
1004 if (n > \-1) /* glibc 2.1 */
1005 size = n+1; /* precisely what is needed */
1006 else /* glibc 2.0 */
1007 size *= 2; /* twice the old size */
1009 if ((np = realloc (p, size)) == NULL) {