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"
51 .\"O printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,
52 .\"O vsnprintf \- formatted output conversion
53 printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,
54 vsnprintf \- 指定された書式に変換して出力を行う
59 .BI "int printf(const char *" format ", ...);"
61 .BI "int fprintf(FILE *" stream ", const char *" format ", ...);"
63 .BI "int sprintf(char *" str ", const char *" format ", ...);"
65 .BI "int snprintf(char *" str ", size_t " size ", const char *" format ", ...);"
67 .B #include <stdarg.h>
69 .BI "int vprintf(const char *" format ", va_list " ap );
71 .BI "int vfprintf(FILE *" stream ", const char *" format ", va_list " ap );
73 .BI "int vsprintf(char *" str ", const char *" format ", va_list " ap );
75 .BI "int vsnprintf(char *" str ", size_t " size ", const char *" format \
79 .\"O Feature Test Macro Requirements for glibc (see
80 .\"O .BR feature_test_macros (7)):
82 .RB ( feature_test_macros (7)
90 _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _ISOC99_SOURCE ||
91 _POSIX_C_SOURCE\ >=\ 200112L;
99 .\"O The functions in the
101 .\"O family produce output according to a
103 .\"O as described below.
114 .\"O the standard output stream;
118 .\"O write output to the given output
121 .\"O .BR snprintf (),
124 .\"O .BR vsnprintf ()
125 .\"O write to the character string
150 .\"O .BR vsnprintf ()
153 .\"O bytes (including the terminating null byte (\(aq\e0\(aq)) to
164 には文字列を終端する NULL バイト (\(aq\e0\(aq) もを含まれる)。
168 .\"O .BR vfprintf (),
169 .\"O .BR vsprintf (),
170 .\"O .BR vsnprintf ()
171 .\"O are equivalent to the functions
175 .\"O .BR snprintf (),
176 .\"O respectively, except that they are called with a
178 .\"O instead of a variable number of arguments.
179 .\"O These functions do not call the
182 .\"O Because they invoke the
184 .\"O macro, the value of
186 .\"O is undefined after the call.
198 の各関数と等価であり、可変数引き数の代わりに
200 を引き数として呼び出される点だけが異なる。
212 .\"O These eight functions write the output under the control of a
214 .\"O string that specifies how subsequent arguments (or arguments accessed via
215 .\"O the variable-length argument facilities of
217 .\"O are converted for output.
224 の可変長引き数機構を使ってアクセスできる引き数)
225 をどのように変換して出力するかを指定する。
227 .\"O C99 and POSIX.1-2001 specify that the results are undefined if a call to
229 .\"O .BR snprintf (),
230 .\"O .BR vsprintf (),
232 .\"O .BR vsnprintf ()
233 .\"O would cause copying to take place between objects that overlap
234 .\"O (e.g., if the target string array and one of the supplied input arguments
235 .\"O refer to the same buffer).
237 C99 と POSIX.1-2001 では、
242 の呼び出しで、範囲が重複するオブジェクト間でコピーが発生する場合の
243 結果は不定であると規定されている (例えば、出力先の文字列と入力された
244 引き数の一つが同じバッファを参照している場合などである)。
246 .\"O .SS "Return value"
248 .\"O Upon successful return, these functions return the number of characters
249 .\"O printed (excluding the null byte used to end output to strings).
250 成功時には、上記の関数は書き込まれた文字数を返す
251 (文字列の最後を示すために使用する NULL バイトは数に含まれない)。
256 .\"O .BR vsnprintf ()
257 .\"O do not write more than
259 .\"O bytes (including the terminating null byte (\(aq\e0\(aq)).
260 .\"O If the output was truncated due to this limit then the return value
261 .\"O is the number of characters (excluding the terminating null byte)
262 .\"O which would have been written to the final string if enough space
263 .\"O had been available.
264 .\"O Thus, a return value of
266 .\"O or more means that the output was truncated.
267 .\"O (See also below under NOTES.)
275 には文字列を終端する NULL バイト (\(aq\e0\(aq) も含まれる)。
276 この制限によって出力が切り詰められた場合には、
277 もし十分なスペースがあれば書き込まれたであろう文字の個数
278 (文字列を終端する NULL バイトを除く) を返す。
281 以上だった場合、出力が切り詰められたことを意味する
284 .\"O If an output error is encountered, a negative value is returned.
286 .\"O .SS "Format of the format string"
288 .\"O The format string is a character string, beginning and ending
289 .\"O in its initial shift state, if any.
291 (もしあるなら) 初期シフト状態で始まり、初期シフト状態で終わる。
292 .\"O The format string is composed of zero or more directives: ordinary
295 .\"O which are copied unchanged to the output stream;
296 .\"O and conversion specifications, each of which results in fetching zero or
297 .\"O more subsequent arguments.
298 フォーマット用の文字列は 0 個以上の命令 (directives) によって構成される。
299 命令には、通常文字と変換指定 (conversion specifications) がある。
302 以外の文字で、出力ストリームにそのままコピーされる。
303 変換指定は、それぞれが 0 個以上の引き数を取る。
304 .\"O Each conversion specification is introduced by
308 .\"O .IR "conversion specifier" .
312 .I "変換指定子 (conversion specifier)"
314 .\"O In between there may be (in this order) zero or more
316 .\"O an optional minimum
317 .\"O .IR "field width" ,
321 .\"O .IR "length modifier" .
331 .\"O The arguments must correspond properly (after type promotion) with the
332 .\"O conversion specifier.
333 .\"O By default, the arguments are used in the order
334 .\"O given, where each \(aq*\(aq and each conversion specifier asks for the next
335 .\"O argument (and it is an error if insufficiently many arguments are given).
336 引き数は (型の格上げの後は) 変換指定子が表す型と正確に対応しなければならない。
337 デフォルトでは、\(aq*\(aq や変換指定子が出てくる毎に次の引き数を要求され、
339 (指定された引き数の個数が不十分ならエラーとなる)。
340 .\"O One can also specify explicitly which argument is taken,
341 .\"O at each place where an argument is required, by writing "%m$" instead
342 .\"O of \(aq%\(aq and "*m$" instead of \(aq*\(aq,
343 .\"O where the decimal integer m denotes
344 .\"O the position in the argument list of the desired argument, indexed starting
350 .\"O printf("%*d", width, num);
358 .\"O printf("%2$*1$d", width, num);
362 また、引き数が必要な箇所で \(aq%\(aq の代わりに "%m$"、
363 \(aq*\(aqの代わりに "*m$" と書くことで、
364 明示的にどの引き数を使用するかを指定することもできる。
365 ここで 10進の整数 m は希望の引き数の引き数リストでの位置を示す
371 printf("%*d", width, num);
373 printf("%2$*1$d", width, num);
379 .\"O The second style allows repeated references to the
381 .\"O The C99 standard does not include the style using \(aq$\(aq,
382 .\"O which comes from the Single UNIX Specification.
383 .\"O If the style using
384 .\"O \(aq$\(aq is used, it must be used throughout for all conversions taking an
385 .\"O argument and all width and precision arguments, but it may be mixed
386 .\"O with "%%" formats which do not consume an argument.
388 .\"O gaps in the numbers of arguments specified using \(aq$\(aq; for example, if
389 .\"O arguments 1 and 3 are specified, argument 2 must also be specified
390 .\"O somewhere in the format string.
391 二番目の書き方では同じ引き数を繰り返し参照することができる。
392 C99 標準には、 Single UNIX Specification 由来の \(aq$\(aq を使った書き方は含まれていない。
393 \(aq$\(aq を使ったスタイルを使うと、引き数を取る変換及び幅と精度の引き数を
394 全てこのスタイルで指定しなければならないが、
395 引き数を消費しない "%%" フォーマットと混ざっているかもしれない。
396 \(aq$\(aq で指定される引き数の番号に空きがあってはならない。
397 例えば、もし引き数 1 と 3 が指定されると、引き数 2 もフォーマット文字列のどこかで
400 .\"O For some numeric conversion a radix character ("decimal point") or
401 .\"O thousands' grouping character is used.
402 .\"O The actual character used
405 .\"O part of the locale.
406 .\"O The POSIX locale
407 .\"O uses \(aq.\(aq as radix character, and does not have a grouping character.
408 数値変換には小数点や 1000 単位の区切り文字を使うものもある。
412 POSIX ロケールでは小数点に \(aq.\(aq を用い、
419 printf("%\(aq.2f", 1234567.89);
423 .\"O results in "1234567.89" in the POSIX locale, in "1234567,89" in the
424 .\"O nl_NL locale, and in "1.234.567,89" in the da_DK locale.
425 は、 POSIX ロケールでは "1234567.89" 、 nl_NL ロケールでは "1234567,89"、
426 da_DK ロケールでは "1.234.567,89" となる。
427 .\"O .SS "The flag characters"
429 .\"O The character % is followed by zero or more of the following flags:
430 % 文字の後ろには 0 個以上のフラグ文字が続く。
433 .\"O The value should be converted to an "alternate form".
438 .\"O conversions, the first character of the output string is made zero
439 .\"O (by prefixing a 0 if it was not zero already).
441 変換の場合、(先頭文字が 0 になっていない場合に先頭に 0 を追加することで)
447 .\"O conversions, a nonzero result has the string "0x" (or "0X" for
449 .\"O conversions) prepended to it.
453 変換の場合、数値が 0 でないときには文字列 "0x"
455 変換の場合には "0X") が前に付与される。
466 .\"O conversions, the result will always contain a decimal point, even if no
467 .\"O digits follow it (normally, a decimal point appears in the results of those
468 .\"O conversions only if a digit follows).
480 (通常は、小数点の後に数字が続く場合にのみ、
485 .\"O conversions, trailing zeros are not removed from the result as they would
490 変換の場合、他の変換とは異なり、末尾のゼロが変換結果から削除されない。
491 .\"O For other conversions, the result is undefined.
495 .\"O The value should be zero padded.
512 .\"O conversions, the converted value is padded on the left with zeros rather
529 変換では、変換した値の左側を空白文字の代わりにゼロで埋める。
534 .\"O flags both appear, the
536 .\"O flag is ignored.
543 .\"O If a precision is given with a numeric conversion
553 .\"O flag is ignored.
564 .\"O For other conversions, the behavior is undefined.
568 .\"O The converted value is to be left adjusted on the field boundary.
569 .\"O (The default is right justification.)
572 .\"O conversions, the converted value is padded on the right with blanks, rather
573 .\"O than on the left with blanks or zeros.
579 左側ではなく右側を空白文字やゼロで埋められる。
583 .\"O if both are given.
593 .\"O (a space) A blank should be left before a positive number
594 .\"O (or empty string) produced by a signed conversion.
596 符号付き変換で生成された正の数字の前に空白 (または空文字列) が置かれる。
599 .\"O A sign (+ or \-) should always be placed before a number produced by a signed
601 .\"O By default a sign is used only for negative numbers.
604 .\"O overrides a space if both are used.
606 符号付き変換によって出力される数字の前に、常に符号 (+ か \-) が置かれる。
607 デフォルトでは、符号は負の数字の場合のみ付与される。
614 .\"O The five flag characters above are defined in the C standard.
615 .\"O The SUSv2 specifies one further flag character.
616 上記の 5 つのフラグは C 標準で定義されている。
617 SUSv2 では、さらにもう一つフラグ文字が規定されている。
620 .\"O For decimal conversion
628 .\"O the output is to be grouped with thousands' grouping characters
629 .\"O if the locale information indicates any.
630 .\"O Note that many versions of
632 .\"O cannot parse this option and will issue a warning.
643 において、ロケール情報に指定があれば 1000 単位の区切り文字を出力する。
645 の多くのバージョンは、このオプションを解釈することができず、
647 %\(aqF は SUSv2 には含まれていない。
649 .\"O glibc 2.2 adds one further flag character.
650 glibc 2.2 では、さらに一つフラグ文字が追加されている。
653 .\"O For decimal integer conversion
657 .\"O the output uses the locale's alternative output digits, if any.
658 .\"O For example, since glibc 2.2.3 this will give Arabic-Indic digits
659 .\"O in the Persian ("fa_IR") locale.
660 .\"O .\" outdigits keyword in locale file
665 において、ロケールの代替出力数字があれば、それを用いて出力する。
666 例えば、 glibc 2.2.3 以降では、ペルシア ("fa_IR") ロケールで
667 アラビア数字 (Arabic-Indic digits) を出力できる。
668 .\" ロケールファイルには outdigits というキーワードがある。
669 .\"O .SS "The field width"
671 .\"O An optional decimal digit string (with nonzero first digit) specifying
672 .\"O a minimum field width.
673 .\"O If the converted value has fewer characters
674 .\"O than the field width, it will be padded with spaces on the left
675 .\"O (or right, if the left-adjustment flag has been given).
676 最小のフィールド幅を指定する 10進数の数値文字列 (文字列の最初の文字は
678 変換された値の文字数がフィールド長よりも少ない場合、
680 (左揃えのフラグがある場合は右側を埋める)。
681 .\"O Instead of a decimal digit string one may write "*" or "*m$"
682 .\"O (for some decimal integer \fIm\fP) to specify that the field width
683 .\"O is given in the next argument, or in the \fIm\fP-th argument, respectively,
684 .\"O which must be of type
686 10進数の文字列の代わりに "*" や "*m$" (\fIm\fP は 10進整数) を書くこともできる。
687 "*" と "*m$" はそれぞれ、次の引き数と \fIm\fP 番目の引き数をフィールド幅として
691 .\"O A negative field width is taken as a \(aq\-\(aq flag followed by a
692 .\"O positive field width.
694 \(aq\-\(aq フラグと正の数のフィールド幅として扱われる。
695 .\"O In no case does a nonexistent or small field width cause truncation of a
696 .\"O field; if the result of a conversion is wider than the field width, the
697 .\"O field is expanded to contain the conversion result.
698 フィールド幅が小さかったり指定がなかったりしても、フィールドが切り詰められる
699 ことはない。もし変換結果がフィールド幅よりも広かった場合、
700 フィールドは変換結果が入る幅に広げられる。
701 .\"O .SS "The precision"
703 .\"O An optional precision, in the form of a period (\(aq.\(aq) followed by an
704 .\"O optional decimal digit string.
705 オプションである精度は、ピリオド (\(aq.\(aq) とそれに続く10進数という
706 形式で指定する (10進数はオプション) 。
707 .\"O Instead of a decimal digit string one may write "*" or "*m$"
708 .\"O (for some decimal integer m) to specify that the precision
709 .\"O is given in the next argument, or in the m-th argument, respectively,
710 .\"O which must be of type
712 10進数の文字列の代わりに "*" や "*m$" (m は 10 進整数)を書くこともできる。
713 "*" と "*m$" はそれぞれ、次の引き数と m 番目の引き数を精度として
717 .\"O If the precision is given as just \(aq.\(aq, or the precision is negative,
718 .\"O the precision is taken to be zero.
719 精度として \(aq.\(aq だけが指定されたり、精度が負の数だった場合、
721 .\"O This gives the minimum number of digits to appear for
729 .\"O conversions, the number of digits to appear after the radix character for
737 .\"O conversions, the maximum number of significant digits for
741 .\"O conversions, or the maximum number of characters to be printed from a
753 変換では、表示される最小の桁数を指定する。
760 変換では、小数点以下に表示される数字の桁数を指定する。
768 変換では、文字列から出力される最大文字数を指定する。
769 .\"O .SS "The length modifier"
771 .\"O Here, "integer conversion" stands for
790 .\"O A following integer conversion corresponds to a
793 .\"O .I unsigned char
794 .\"O argument, or a following
796 .\"O conversion corresponds to a pointer to a
810 .\"O A following integer conversion corresponds to a
813 .\"O .I unsigned short int
814 .\"O argument, or a following
816 .\"O conversion corresponds to a pointer to a
822 .I unsigned short int
830 .\"O (ell) A following integer conversion corresponds to a
833 .\"O .I unsigned long int
834 .\"O argument, or a following
836 .\"O conversion corresponds to a pointer to a
837 .\"O .I long long int
838 .\"O argument, or a following
840 .\"O conversion corresponds to a
842 .\"O argument, or a following
844 .\"O conversion corresponds to a pointer to
851 .IR "unsigned long int" 、
867 .\"O A following integer conversion corresponds to a
868 .\"O .I long long int
870 .\"O .I unsigned long long int
871 .\"O argument, or a following
873 .\"O conversion corresponds to a pointer to a
880 .I unsigned long long int
898 .\"O conversion corresponds to a
912 .\"O (C99 allows %LF, but SUSv2 does not.)
913 (C99 では %LF を使うことを認めているが、SUSv2 では認められていない。)
916 .\"O ("quad". 4.4BSD and Linux libc5 only.
918 .\"O This is a synonym for
920 ("quad"。 4.4BSD と Linux libc5 のみ有効。使ってはならない。)
925 .\"O A following integer conversion corresponds to an
937 .\"O A following integer conversion corresponds to a
942 .\"O (Linux libc5 has
944 .\"O with this meaning.
951 (Linux libc5 では、これを指定するのに
956 .\"O A following integer conversion corresponds to a
963 .\"O The SUSv2 only knows about the length modifiers
991 SUSv2 で長さ修飾子として使用できるのは、
1015 .\"O .SS "The conversion specifier"
1017 .\"O A character that specifies the type of conversion to be applied.
1020 .\"O The conversion specifiers and their meanings are:
1021 変換指定子とその意味は以下の通りである。
1026 .\"O argument is converted to signed decimal notation.
1028 引き数を符号付き 10 進表記に変換する。
1029 .\"O The precision, if any, gives the minimum number of digits
1030 .\"O that must appear; if the converted value requires fewer digits, it is
1031 .\"O padded on the left with zeros.
1032 .\"O The default precision is 1.
1033 精度指定があれば、精度で指定した桁数は必ず出力される。変換後の値が
1034 指定された桁数に足りない場合は、左側が 0 で埋められる。
1036 .\"O When 0 is printed with an explicit precision 0, the output is empty.
1037 0 を表示しようとした時に、明示的に精度として 0 が指定されていると、
1040 .BR o ", " u ", " x ", " X
1042 .\"O .I "unsigned int"
1043 .\"O argument is converted to unsigned octal
1045 .\"O unsigned decimal
1047 .\"O or unsigned hexadecimal
1067 .\"O conversions; the letters
1080 .\"O The precision, if any, gives the minimum number of digits
1081 .\"O that must appear; if the converted value requires fewer digits, it is
1082 .\"O padded on the left with zeros.
1083 精度指定があれば、精度で指定した桁数は必ず出力される。変換後の値が
1084 指定された桁数に足りない場合は、左側が 0 で埋められる。
1089 .\"O argument is rounded and converted in the style
1090 .\"O .if \w'\*(Pm'=0 .ds Pm \(+-
1091 .\"O .RB [\-]d \&. ddd e \\*(Pmdd
1092 .\"O where there is one digit before the decimal-point character and the number
1093 .\"O of digits after it is equal to the precision; if the precision is missing,
1094 .\"O it is taken as 6; if the precision is zero, no decimal-point character
1099 .if \w'\*(Pm'=0 .ds Pm \(+-
1100 .RB [\-]d \&. ddd e \\*(Pmdd
1102 小数点の前には一桁の数字があり、小数点以下の桁数は精度で指定された
1103 桁数になる。精度は指定されなかった場合 6 とみなされる。
1104 精度が 0 の場合には、小数点以下は表示されない。
1106 .\"O conversion uses the letter
1110 .\"O to introduce the exponent.
1117 .\"O The exponent always contains at least two
1118 .\"O digits; if the value is zero, the exponent is 00.
1120 つまり、指数の値が 0 の場合には、00 と表示される。
1125 .\"O argument is rounded and converted to decimal notation in the style
1126 .\"O .RB [\-]ddd \&. ddd,
1127 .\"O where the number of digits after the decimal-point character is equal to
1128 .\"O the precision specification.
1133 小数点の後の桁数は、精度で指定された値となる。
1134 .\"O If the precision is missing, it is taken as
1135 .\"O 6; if the precision is explicitly zero, no decimal-point character appears.
1136 精度が指定されていない場合には 6 として扱われる。
1137 精度として明示的に 0 が指定されたときには、小数点以下は表示されない。
1138 .\"O If a decimal point appears, at least one digit appears before it.
1139 小数点を表示する際には、小数点の前に少なくとも一桁は数字が表示される。
1141 .\"O (The SUSv2 does not know about
1143 .\"O and says that character string representations for infinity and NaN
1144 .\"O may be made available.
1145 .\"O The C99 standard specifies "[\-]inf" or "[\-]infinity"
1146 .\"O for infinity, and a string starting with "nan" for NaN, in the case of
1148 .\"O conversion, and "[\-]INF" or "[\-]INFINITY" or "NAN*" in the case of
1153 は規定されておらず、無限や NaN に関する文字列表現を
1157 変換では、無限は "[\-]inf" か "[\-]infinity" と表示し、
1158 NaN は文字列の先頭に `nan' をつけて表示するように規定されている。
1160 変換の場合は "[\-]INF", "[\-]INFINITY", "NAN*" と表示される。)
1165 .\"O argument is converted in style
1187 .\"O The precision specifies the number of significant digits.
1189 .\"O If the precision is missing, 6 digits are given; if the precision is zero,
1190 .\"O it is treated as 1.
1191 精度が指定されない場合は、6桁とみなされる。
1192 精度が 0 の場合は、1桁とみなされる。
1195 .\"O is used if the exponent from its conversion is less than \-4 or greater
1196 .\"O than or equal to the precision.
1197 変換される値の指数が、 \-4 より小さいか、精度以上の場合に、
1200 .\"O Trailing zeros are removed from the
1201 .\"O fractional part of the result; a decimal point appears only if it is
1202 .\"O followed by at least one digit.
1203 変換された結果の小数部分の末尾の 0 は削除される。小数点が表示されるのは、
1204 小数点以下に数字が少なくとも一つある場合にだけである。
1207 .\"O (C99; not in SUSv2) For
1209 .\"O conversion, the
1211 .\"O argument is converted to hexadecimal notation (using the letters abcdef)
1213 .\"O .RB [\-] 0x h \&. hhhh p \\*(Pmd;
1216 .\"O conversion the prefix
1218 .\"O the letters ABCDEF, and the exponent separator
1221 (C99 にはあるが SUSv2 にはない)
1225 引き数を (abcdef の文字を使って)
1226 .RB [\-] 0x h \&. hhhh p \\*(Pmd;
1234 .\"O There is one hexadecimal digit before the decimal point,
1235 .\"O and the number of digits after it is equal to the precision.
1236 小数点の前には 1桁の16進数が置かれ、小数点の後ろの桁数は
1238 .\"O The default precision suffices for an exact representation of the value
1239 .\"O if an exact representation in base 2 exists
1240 .\"O and otherwise is sufficiently large to distinguish values of type
1242 デフォルトの精度は、その値が 2進数で正確に表現できる場合には、
1243 その値を正確に表現できる桁数となる。それ以外の場合は、
1245 型の値を区別するのに十分な大きさとなる。
1246 .\"O The digit before the decimal point is unspecified for nonnormalized
1247 .\"O numbers, and nonzero but otherwise unspecified for normalized numbers.
1248 .\" motoki 2005/03/19: 合っているかな?
1249 小数点の前の数字は、正規化されていない数の場合はいくつになるか分からない。
1250 正規化された数の場合は、 0 以外の値になるが、いくつになるかは分からない。
1255 .\"O modifier is present, the
1257 .\"O argument is converted to an
1258 .\"O .IR "unsigned char" ,
1259 .\"O and the resulting character is written.
1265 に変換して、その結果に対応する文字を出力する。
1268 .\"O modifier is present, the
1270 .\"O (wide character) argument is converted to a multibyte sequence by a call
1272 .\"O .BR wcrtomb (3)
1273 .\"O function, with a conversion state starting in the initial state, and the
1274 .\"O resulting multibyte string is written.
1280 関数を初期シフト状態で呼び出してマルチバイト文字列に変換し、
1281 変換されたマルチバイト文字列を出力する。
1286 .\"O modifier is present: The
1287 .\"O .I "const char *"
1288 .\"O argument is expected to be a pointer to an array of character type (pointer
1290 .\"O Characters from the array are written up to (but not
1291 .\"O including) a terminating null byte (\(aq\\0\(aq);
1292 .\"O if a precision is specified, no more than the number specified
1294 .\"O If a precision is given, no null byte need be present;
1295 .\"O if the precision is not specified, or is greater than the size of the
1296 .\"O array, the array must contain a terminating null byte.
1301 型で文字型の配列へのポインタ (文字列へのポインタ) であることが
1302 期待されている。配列中の文字は、終端の NULL バイト (\(aq\\0\(aq)
1303 が出てくるまで出力される (終端文字は出力されない)。
1304 精度が指定されていると、指定された字数以上は出力されない。
1305 精度が指定された場合には、終端バイトが存在する必要はない。
1306 精度が指定されていなかったり、精度の値が配列の大きさより大きい場合には、
1307 配列は終端の NULL バイトを含んでいなければならない。
1311 .\"O modifier is present: The
1312 .\"O .I "const wchar_t *"
1313 .\"O argument is expected to be a pointer to an array of wide characters.
1317 .I "const wchar_t *"
1318 型でワイド文字の配列へのポインタであることが期待されている。
1319 .\"O Wide characters from the array are converted to multibyte characters
1320 .\"O (each by a call to the
1321 .\"O .BR wcrtomb (3)
1322 .\"O function, with a conversion state starting in the initial state before
1323 .\"O the first wide character), up to and including a terminating null
1324 .\"O wide character.
1325 .\"O The resulting multibyte characters are written up to
1326 .\"O (but not including) the terminating null byte.
1327 .\"O If a precision is
1328 .\"O specified, no more bytes than the number specified are written, but
1329 .\"O no partial multibyte characters are written.
1330 .\"O Note that the precision
1331 .\"O determines the number of
1333 .\"O written, not the number of
1334 .\"O .I wide characters
1336 .\"O .IR "screen positions" .
1339 を呼び出して) マルチバイト文字に変換される
1342 のシフト状態を初期状態に戻してから変換は行われる)。
1343 マルチバイト文字への変換は、文字列を終端する NULL ワイド文字が
1344 出てくるまで行われ、終端 NULL ワイド文字も含めて変換される。
1345 結果のマルチバイト文字列は、終端の NULL バイトが出てくるまで
1346 出力される (終端の NULL バイトは出力されない)。
1347 精度が指定された場合、指定されたバイト数以上には出力されない。
1348 但し、マルチバイト文字の一部分だけが出力されることはない。
1349 精度は「バイト」数を指定するものであり、「ワイド文字」数や
1350 「画面での位置」を指定するものではないことに注意。
1351 .\"O The array must contain a terminating null wide character, unless a
1352 .\"O precision is given and it is so small that the number of bytes written
1353 .\"O exceeds it before the end of the array is reached.
1354 精度が指定されていて、さらに出力が配列の末尾に達する前に出力バイト数が
1355 精度の値を超える場合だけは、配列は NULL ワイド文字で終端されていなくてもよい。
1356 それ以外の場合は、必ず配列は NULL ワイド文字で終端されていなければならない。
1359 .\"O (Not in C99, but in SUSv2.)
1363 (C99 にはないが SUSv2 にはある)
1368 .\"O (Not in C99, but in SUSv2.)
1372 (C99 にはないが SUSv2 にはある)
1379 .\"O pointer argument is printed in hexadecimal (as if by
1391 .\"O The number of characters written so far is stored into the integer
1392 .\"O indicated by the
1394 .\"O (or variant) pointer argument.
1395 .\"O No argument is converted.
1398 (または類似の型) のポインタ引き数が指す整数に保存する。
1402 .\"O (Glibc extension.)
1403 .\"O Print output of
1404 .\"O .IR strerror(errno) .
1405 .\"O No argument is required.
1411 .\"O A \(aq%\(aq is written.
1412 .\"O No argument is converted.
1413 .\"O The complete conversion
1414 .\"O specification is \(aq%%\(aq.
1415 \(aq%\(aq 文字を出力する。変換される引き数は無い。
1416 変換指定全体を書くと "%%" となる。
1417 .\"O .SH "CONFORMING TO"
1420 .\"O .BR fprintf (),
1422 .\"O .BR sprintf (),
1423 .\"O .BR vprintf (),
1424 .\"O .BR vfprintf (),
1426 .\"O .BR vsprintf ()
1427 .\"O functions conform to C89 and C99.
1434 関数は、C89 と C99 に準拠している。
1436 .\"O .BR snprintf ()
1438 .\"O .BR vsnprintf ()
1439 .\"O functions conform to C99.
1445 .\"O Concerning the return value of
1446 .\"O .BR snprintf (),
1447 .\"O SUSv2 and C99 standard contradict each other: when
1448 .\"O .BR snprintf ()
1451 .\"O then SUSv2 stipulates an unspecified return value less than 1,
1452 .\"O while C99 allows
1454 .\"O to be NULL in this case, and gives the return value (as always)
1455 .\"O as the number of characters that would have been written in case
1456 .\"O the output string has been large enough.
1459 SUSv2 と C99 標準は互いに矛盾している。
1464 で呼び出された場合、 1 未満の値を何か返り値とするように規定している。
1467 を NULL とし、返り値として (通常通り) 出力バッファが十分な大きさが
1468 あった場合に出力されるであろう文字数を返す。
1470 .\"O Linux libc4 knows about the five C standard flags.
1471 .\"O It knows about the length modifiers \fBh\fP, \fBl\fP, \fBL\fP,
1472 .\"O and the conversions
1473 .\"O \fBc\fP, \fBd\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP,
1474 .\"O \fBg\fP, \fBG\fP, \fBi\fP, \fBn\fP, \fBo\fP, \fBp\fP,
1475 .\"O \fBs\fP, \fBu\fP, \fBx\fP, and \fBX\fP,
1476 .\"O where \fBF\fP is a synonym for \fBf\fP.
1477 Linux libc4 では、 5 つの C 標準のフラグ、
1478 長さ修飾子 \fBh\fP, \fBl\fP, \fBL\fP、変換
1479 \fBc\fP, \fBd\fP, \fBe\fP, \fBE\fP, \fBf\fP, \fBF\fP,
1480 \fBg\fP, \fBG\fP, \fBi\fP, \fBn\fP, \fBo\fP, \fBp\fP,
1481 \fBs\fP, \fBu\fP, \fBx\fP, \fBX\fP
1483 但し \fBF\fP は \fBf\fP と同義である。
1484 .\"O Additionally, it accepts \fBD\fP, \fBO\fP, and \fBU\fP as synonyms
1485 .\"O for \fBld\fP, \fBlo\fP, and \fBlu\fP.
1486 .\"O (This is bad, and caused serious bugs later, when
1487 .\"O support for \fB%D\fP disappeared.)
1488 .\"O No locale-dependent radix character,
1489 .\"O no thousands' separator, no NaN or infinity, no "%m$" and "*m$".
1490 また、 \fBD\fP, \fBO\fP, and \fBU\fP を \fBld\fP, \fBlo\fP, and \fBlu\fP
1492 (これはまずい仕様で、 後に \fB%D\fP の対応が打ち切られた時に深刻なバグを
1493 引き起こした)。ロケール依存の小数点、1000 区切り、 NaN と無限、
1494 "%m$" と "*m$" は使えない。
1496 .\"O Linux libc5 knows about the five C standard flags and the \(aq flag,
1497 .\"O locale, "%m$" and "*m$".
1498 .\"O It knows about the length modifiers \fBh\fP, \fBl\fP, \fBL\fP,
1499 .\"O \fBZ\fP, and \fBq\fP, but accepts \fBL\fP and \fBq\fP
1500 .\"O both for \fIlong double\fP and for \fIlong long int\fP (this is a bug).
1501 Linux libc5 では、 5 つの C 標準のフラグと \(aq フラグ、ロケール、
1503 また、長さ修飾子 \fBh\fP, \fBl\fP, \fBL\fP, \fBZ\fP, iand \fBq\fP が使えるが、
1504 \fBL\fP と \fBq\fP は両方とも
1505 \fIlong double\fP と \fIlong long int\fP に対応している (これはバグである)。
1506 .\"O It no longer recognizes \fBF\fP, \fBD\fP, \fBO\fP, and \fBU\fP,
1507 .\"O but adds the conversion character
1510 .\"O .IR strerror(errno) .
1511 現在では変換 \fBF\fP, \fBD\fP, \fBO\fP, \fBU\fP は認識されないが、変換文字
1517 .\"O glibc 2.0 adds conversion characters \fBC\fP and \fBS\fP.
1518 glibc 2.0 では、変換文字 \fBC\fP と \fBS\fP が追加された。
1520 .\"O glibc 2.1 adds length modifiers \fBhh\fP, \fBj\fP, \fBt\fP, and \fBz\fP
1521 .\"O and conversion characters \fBa\fP and \fBA\fP.
1522 glibc 2.1 では、長さ修飾子 \fBhh\fP, \fBj\fP, \fBt\fP, \fBz\fP
1523 と変換文字 \fBa\fP, \fBA\fP が追加された。
1525 .\"O glibc 2.2 adds the conversion character \fBF\fP with C99 semantics,
1526 .\"O and the flag character \fBI\fP.
1527 glibc 2.2 では、 C99 で規定された意味での変換文字 \fBF\fP と
1528 フラグ文字 \fBI\fP が追加された。
1531 .\"O Some programs imprudently rely on code such as the following
1533 .\"O sprintf(buf, "%s some further text", buf);
1535 .\"O to append text to
1539 に追加するのに、軽率にも次のようなコードを使っているプログラムがある。
1541 sprintf(buf, "%s some further text", buf);
1543 .\"O However, the standards explicitly note that the results are undefined
1544 .\"O if source and destination buffers overlap when calling
1545 .\"O .BR sprintf (),
1546 .\"O .BR snprintf (),
1547 .\"O .BR vsprintf (),
1549 .\"O .BR vsnprintf ().
1555 の呼び出しにおいて、コピー元とコピー先のバッファが重なっていた場合の
1557 .\" http://sourceware.org/bugzilla/show_bug.cgi?id=7075
1558 .\"O Depending on the version of
1560 .\"O used, and the compiler options employed, calls such as the above will
1562 .\"O produce the expected results.
1565 のバージョンや指定したコンパイラのオプション次第では、
1566 上記のような呼び出しで、期待した結果が得られ「ない」ことがある。
1568 .\"O The glibc implementation of the functions
1569 .\"O .BR snprintf ()
1571 .\"O .BR vsnprintf ()
1572 .\"O conforms to the C99 standard, that is, behaves as described above,
1573 .\"O since glibc version 2.1.
1574 .\"O Until glibc 2.0.6 they would return \-1
1575 .\"O when the output was truncated.
1580 の実装は、バージョン 2.1 以降は C99 標準に準拠しており、
1582 glibc 2.0.6 までは、出力が切り詰められた場合は \-1 を返す。
1583 .\"O .\" .SH HISTORY
1585 .\"O .\" UNIX V7 defines the three routines
1586 .\"O .\" .BR printf (),
1587 .\"O .\" .BR fprintf (),
1588 .\"O .\" .BR sprintf (),
1589 .\"O .\" and has the flag \-, the width or precision *, the length modifier l,
1590 .\"O .\" and the conversions doxfegcsu, and also D,O,U,X as synonyms for ld,lo,lu,lx.
1595 .\" の 3 つの関数と、フラグ \-、幅と精度での *、長さ修飾子 l、
1596 .\" 変換 doxfegcsu、そして ld,ld,lu,lx の同義語として D,O,U,X が定義されている。
1597 .\"O .\" This is still true for 2.9.1BSD, but 2.10BSD has the flags
1598 .\"O .\" #, + and <space> and no longer mentions D,O,U,X.
1599 .\" 2.9.1BSD でもこれは同じだったが、 2.10BSD では
1600 .\" フラグ #, +, 空白が追加され、 D,O,U,X については記載されなくなった。
1601 .\"O .\" 2.11BSD has
1602 .\"O .\" .BR vprintf (),
1603 .\"O .\" .BR vfprintf (),
1604 .\"O .\" .BR vsprintf (),
1605 .\"O .\" and warns not to use D,O,U,X.
1608 .\" .BR vfprintf (),
1610 .\" が追加され、 D,O,U,X を使わないように警告された。
1611 .\"O .\" 4.3BSD Reno has the flag 0, the length modifiers h and L,
1612 .\"O .\" and the conversions n, p, E, G, X (with current meaning)
1613 .\"O .\" and deprecates D,O,U.
1614 .\" 4.3BSD Reno ではフラグ 0、長さ修飾子 h と L、
1615 .\" 変換 n, p, E, G, (現在の意味での) X が追加され、
1616 .\" D,O,U は非推奨扱いとなった。
1617 .\"O .\" 4.4BSD introduces the functions
1618 .\"O .\" .BR snprintf ()
1620 .\"O .\" .BR vsnprintf (),
1621 .\"O .\" and the length modifier q.
1623 .\" .BR snprintf ()と
1624 .\" .BR vsnprintf ()、
1626 .\"O .\" FreeBSD also has functions
1627 .\"O .\" .BR asprintf ()
1629 .\"O .\" .BR vasprintf (),
1630 .\"O .\" that allocate a buffer large enough for
1631 .\"O .\" .BR sprintf ().
1634 .\" のために十分なバッファを確保する
1637 .\" .BR vasprintf ()
1639 .\"O .\" In glibc there are functions
1640 .\"O .\" .BR dprintf ()
1642 .\"O .\" .BR vdprintf ()
1643 .\"O .\" that print to a file descriptor instead of a stream.
1647 .\" があり、これらはストリームではなくファイルディスクリプタに出力する。
1653 .\"O .BR vsprintf ()
1654 .\"O assume an arbitrarily long string, callers must be careful not to overflow
1655 .\"O the actual space; this is often impossible to assure.
1656 .\"O Note that the length
1657 .\"O of the strings produced is locale-dependent and difficult to predict.
1661 は勝手に十分に長い文字列領域があると仮定するので、呼び出し側は
1662 実際の領域からあふれないように注意しなければならない。
1663 しかし、これを保証することが不可能な場合が多い。
1664 生成される文字列の長さはロケール依存であり、予測が難しいことに注意。
1666 .\"O .BR snprintf ()
1668 .\"O .BR vsnprintf ()
1670 .\"O .BR asprintf (3)
1672 .\"O .BR vasprintf (3)).
1683 .\"O Linux libc4.[45] does not have a
1684 .\"O .BR snprintf (),
1685 .\"O but provides a libbsd that contains an
1686 .\"O .BR snprintf ()
1688 .\"O .BR sprintf (),
1689 .\"O that is, one that ignores the
1694 はないが、 libbsd が提供されており、
1702 .\"O Thus, the use of
1703 .\"O .BR snprintf ()
1704 .\"O with early libc4 leads to serious security problems.
1707 を使うと、深刻なセキュリティ問題を引き起こすことがある。
1710 .\"O .BI printf( foo );
1711 .\"O often indicates a bug, since
1713 .\"O may contain a % character.
1716 .\"O comes from untrusted user input, it may contain \fB%n\fP, causing the
1718 .\"O call to write to memory and creating a security hole.
1720 のようなコードはしばしばバグを引き起こす。
1723 に % 文字が含まれてるかもしれないからである。
1725 が信頼できないユーザー入力から作られている場合には、
1726 その中に \fB%n\fP が含まれていることがあり、
1728 呼び出し時にメモリへの書き込みが起こり、
1729 セキュリティーホールを作ることになるかもしれない。
1731 .\".\"O Some floating-point conversions under early libc4
1732 .\".\"O caused memory leaks.
1733 .\"初期の libc4 での実数変換にはメモリリークを引き起こすことがある。
1736 .if \w'\*(Pi'=0 .ds Pi pi
1737 .\"O To print \*(Pi to five decimal places:
1744 fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0));
1748 .\"O To print a date and time in the form "Sunday, July 3, 10:02",
1753 .\"O are pointers to strings:
1754 日付と時間を "Sunday, July 3, 10:02" の形式で出力する。
1763 fprintf(stdout, "%s, %s %d, %.2d:%.2d\en",
1764 weekday, month, day, hour, min);
1768 .\"O Many countries use the day-month-year order.
1769 .\"O Hence, an internationalized version must be able to print
1770 .\"O the arguments in an order specified by the format:
1771 日 - 月 - 年 の順序で表示を行う国も多い。
1772 従って、国際版では書式で指定された順番で
1778 fprintf(stdout, format,
1779 weekday, month, day, hour, min);
1785 .\"O depends on locale, and may permute the arguments.
1786 .\"O With the value:
1788 はロケールに依存しており、引き数の順番を変えることもできる。
1794 "%1$s, %3$d. %2$s, %4$d:%5$.2d\en"
1798 .\"O one might obtain "Sonntag, 3. Juli, 10:02".
1799 であれば、 "Sonntag, 3. Juli, 10:02" という結果になる。
1801 .\"O To allocate a sufficiently large string and print into it
1802 .\"O (code correct for both glibc 2.0 and glibc 2.1):
1803 十分に大きな文字列領域を確保して、そこにメッセージを格納するには
1804 (glibc 2.0 と glibc 2.1 の両方で正しく動作するコード):
1811 make_message(const char *fmt, ...)
1814 int size = 100; /* Guess we need no more than 100 bytes. */
1818 if ((p = malloc(size)) == NULL)
1823 /* Try to print in the allocated space. */
1826 n = vsnprintf(p, size, fmt, ap);
1829 /* If that worked, return the string. */
1831 if (n > \-1 && n < size)
1834 /* Else try again with more space. */
1836 if (n > \-1) /* glibc 2.1 */
1837 size = n+1; /* precisely what is needed */
1838 else /* glibc 2.0 */
1839 size *= 2; /* twice the old size */
1841 if ((np = realloc (p, size)) == NULL) {