書式指定構文: printf 関数と wprintf 関数Format specification syntax: printf and wprintf functions

printfwprintf 系のさまざまな関数では、書式設定文字列と省略可能な引数を受け取り、書式設定された文字のシーケンスを出力として生成します。The various printf and wprintf functions take a format string and optional arguments and produce a formatted sequence of characters for output. 書式設定文字列には、0 個以上のディレクティブが含まれています。ディレクティブとは、出力する文字リテラル、または出力で引数を書式設定する方法を指定するためのエンコードされた変換指定です。The format string contains zero or more directives, which are either literal characters for output or encoded conversion specifications that describe how to format an argument in the output. この記事では、書式設定文字列内の変換指定をエンコードするために使用する構文について説明します。This article describes the syntax used to encode conversion specifications in the format string. これらの関数の一覧については、「ストリーム入出力」を参照してください。For a listing of these functions, see Stream I/O.

変換指定は、次に示す形式のように、省略可能なフィールドと必須フィールドで構成されます。A conversion specification consists of optional and required fields in this form:

% [flags][width][.precision][size]type%[flags][width][.precision][size]type

変換指定の各フィールドには、特定の書式オプションまたは変換指定子を示す文字または数値を設定します。Each field of the conversion specification is a character or a number that signifies a particular format option or conversion specifier. 必須の type フィールドには、引数に適用する変換の種類を指定します。The required type field specifies the kind of conversion to be applied to an argument. 省略可能なフィールドである flagswidth、および precision は、先頭のスペースやゼロ、配置、表示の有効桁数など、書式の追加的な要素を制御するためのフィールドです。The optional flags, width, and precision fields control additional format aspects such as leading spaces or zeroes, justification, and displayed precision. size フィールドには、変換される引数のサイズを指定します。The size field specifies the size of the argument consumed and converted.

変換指定の基本的な構成は、パーセント記号と type 文字のみです。A basic conversion specification contains only the percent sign and a type character. たとえば、%s は文字の変換を指定しています。For example, %s specifies a string conversion. パーセント記号の文字を出力するには、%% を使用します。To print a percent-sign character, use %%. パーセント記号の後に書式設定フィールドとして意味をなさない文字が続く場合は、無効なパラメーター ハンドラーが呼び出されます。If a percent sign is followed by a character that has no meaning as a format field, the invalid parameter handler is invoked. 詳細については、「パラメーターの検証」を参照してください。For more information, see Parameter Validation.

重要

セキュリティと安定性を保つために、変換指定の文字列がユーザー定義されていないことを確認してください。For security and stability, ensure that conversion specification strings are not user-defined. たとえば、名前の入力をユーザーに要求し、その入力を user_name という名前の文字列変数に格納するプログラムについて検討します。For example, consider a program that prompts the user to enter a name and stores the input in a string variable that's named user_name. user_name を出力するには、このように実行しないでください。To print user_name, do not do this:

printf( user_name ); /* Danger! If user_name contains "%s", program will crash */

代わりに、このように実行します。Instead, do this:

printf( "%s", user_name );

type 変換指定子Type conversion specifier

type 変換指定子の文字は、対応する引数を文字、文字列、ポインター、整数、浮動小数点数のいずれの型として解釈するかを指定します。The type conversion specifier character specifies whether to interpret the corresponding argument as a character, a string, a pointer, an integer, or a floating-point number. type 文字だけが必須の変換指定フィールドで、省略可能なフィールドをその後に続けて指定します。The type character is the only required conversion specification field, and it appears after any optional fields.

書式設定文字列に続く引数は、対応する type 文字と、省略可能な size プレフィックスに従って解釈されます。The arguments that follow the format string are interpreted according to the corresponding type character and the optional size prefix. 文字型 char および wchar_t の変換は c または C を使用して指定し、1 バイト文字列とマルチバイト (ワイド文字) 文字列の変換は、使用する書式設定関数に応じて s または S を使用して指定します。Conversions for character types char and wchar_t are specified by using c or C, and single-byte and multi-byte or wide character strings are specified by using s or S, depending on which formatting function is being used. c および s を使用して指定された文字引数と文字列引数は、printf 系の関数では char および char* として解釈され、wprintf 系の関数では wchar_t および wchar_t* として解釈されます。Character and string arguments that are specified by using c and s are interpreted as char and char* by printf family functions, or as wchar_t and wchar_t* by wprintf family functions. C および S を使用して指定された文字引数と文字列引数は、printf 系の関数では wchar_t および wchar_t* として解釈され、wprintf 系の関数では char および char* として解釈されます。Character and string arguments that are specified by using C and S are interpreted as wchar_t and wchar_t* by printf family functions, or as char and char* by wprintf family functions. この動作は Microsoft 固有の仕様です。This behavior is Microsoft specific.

shortintlonglong long などの整数型と、その unsigned のバリエーションは、dioux、および X を使用して指定します。floatdoublelong double などの浮動小数点数型は、aAeEfFg、および G を使用して指定します。size プレフィックスで変更しない場合、既定では、整数引数は int 型に強制変換され、浮動小数点引数は double 型に強制変換されます。Integer types such as short, int, long, long long, and their unsigned variants, are specified by using d, i, o, u, x, and X. Floating-point types such as float, double, and long double, are specified by using a, A, e, E, f, F, g, and G. By default, unless they are modified by a size prefix, integer arguments are coerced to int type, and floating-point arguments are coerced to double. 64 ビット システム上では、int は 32 ビット値です。そのため、size プレフィックスに ll または I64 を使用しない限り、64 ビット整数は、出力のために書式設定される際に切り捨てが行われます。On 64-bit systems, an int is a 32-bit value; therefore, 64-bit integers will be truncated when they are formatted for output unless a size prefix of ll or I64 is used. p で指定されるポインター型では、プラットフォームの既定のポインター サイズが使用されます。Pointer types that are specified by p use the default pointer size for the platform.

注意

Microsoft 固有 type 文字 Z、および printf 関数と wprintf 関数で使用した場合の type 文字 cCs、および S の動作は、Microsoft の拡張機能です。Microsoft Specific The Z type character, and the behavior of the c, C, s, and S type characters when they are used with the printf and wprintf functions, are Microsoft extensions. ISO C 標準では、すべての書式設定関数で、ナロー文字とナロー文字列に cs が、ワイド文字とワイド文字列に CS が一貫して使用されています。The ISO C standard uses c and s consistently for narrow characters and strings, and C and S for wide characters and strings, in all formatting functions.

type フィールドの文字Type field characters

type 文字Type character 引数Argument [出力形式]Output format
cc 文字Character printf 関数で使用する場合は 1 バイト文字を指定し、wprintf 関数で使用する場合はワイド文字を指定します。When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.
CC 文字Character printf 関数で使用する場合はワイド文字を指定し、wprintf 関数で使用する場合は 1 バイト文字を指定します。When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.
dd 整数型Integer 符号付き 10 進整数。Signed decimal integer.
ii 整数型Integer 符号付き 10 進整数。Signed decimal integer.
oo 整数型Integer 符号なし 8 進整数。Unsigned octal integer.
uu 整数型Integer 符号なし 10 進整数。Unsigned decimal integer.
xx 整数型Integer 符号なし 16 進整数。"abcdef" を使用します。Unsigned hexadecimal integer; uses "abcdef."
XX 整数型Integer 符号なし 16 進整数。"ABCDEF" を使用します。Unsigned hexadecimal integer; uses "ABCDEF."
ee 浮動小数点数Floating-point [-]d.dddddd[d] という形式の符号付きの値です。d は 1 桁の 10 進数です。dddd は指定された有効桁数に応じて 1 桁以上の 10 進数です (既定値は 6 桁)。dd[d] は、指数部の出力書式とサイズに応じて 2 桁または 3 桁の 10 進数です。Signed value that has the form [-]d.dddddd[d], where d is one decimal digit, dddd is one or more decimal digits depending on the specified precision, or six by default, and dd[d] is two or three decimal digits depending on the output format and size of the exponent.
EE 浮動小数点数Floating-point 指数部の先頭が e ではなく E であることを除いて、書式 e と同じです。Identical to the e format except that E rather than e introduces the exponent.
ff 浮動小数点数Floating-point [-]dddd . dddd という形式の符号付きの値です。dddd は、1 桁以上の 10 進数です。Signed value that has the form [-]dddd.dddd, where dddd is one or more decimal digits. 整数部の桁数は、その数値の絶対値によって決定され、小数部の桁数は指定された精度によって決定されます (既定値は 6 桁)。The number of digits before the decimal point depends on the magnitude of the number, and the number of digits after the decimal point depends on the requested precision, or six by default.
FF 浮動小数点数Floating-point 無限大と NaN の出力が大文字になることを除いて、書式 f と同じです。Identical to the f format except that infinity and nan output is capitalized.
gg 浮動小数点数Floating-point 符号付きの値を、書式 f または e のうち、与えられた値および精度を表現できる短い方の書式で書式設定します。Signed values are displayed in f or e format, whichever is more compact for the given value and precision. 書式 e が使用されるのは、指数部の値が -4 より小さい場合か、precision 引数の値以上の場合のみです。The e format is used only when the exponent of the value is less than -4 or greater than or equal to the precision argument. 末尾の 0 は切り捨てられ、小数点は 1 桁以上の小数部が続く場合にのみ表示されます。Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.
GG 浮動小数点数Floating-point 指数部の先頭が e ではなく E であること (該当する場合) を除いて、書式 g と同じです。Identical to the g format, except that E, rather than e, introduces the exponent (where appropriate).
aa 浮動小数点数Floating-point [-]0xh.hhhhdd という形式の符号付きの 16 進数の倍精度浮動小数点値です。h.hhhh は仮数部の 16 進数の桁 (小文字の英字を使用)、dd は 1 桁以上の指数部です。Signed hexadecimal double-precision floating-point value that has the form [-]0xh.hhhhdd, where h.hhhh are the hex digits (using lower case letters) of the mantissa, and dd are one or more digits for the exponent. 有効桁数は、小数点より後の桁数を指定します。The precision specifies the number of digits after the point.
AA 浮動小数点数Floating-point [-]0Xh.hhhhdd という形式の符号付きの 16 進数の倍精度浮動小数点値です。h.hhhh は仮数部の 16 進数の桁 (大文字の英字を使用)、dd は 1 桁以上の指数部です。Signed hexadecimal double-precision floating-point value that has the form [-]0Xh.hhhhdd, where h.hhhh are the hex digits (using capital letters) of the mantissa, and dd are one or more digits for the exponent. 有効桁数は、小数点より後の桁数を指定します。The precision specifies the number of digits after the point.
nn 整数へのポインターPointer to integer 現時点までにストリームまたはバッファーに正常に書き込まれた文字数。Number of characters that are successfully written so far to the stream or buffer. この値は、引数として指定したアドレスにある整数に格納されます。This value is stored in the integer whose address is given as the argument. ポイントされる整数のサイズは、引数サイズ指定のプレフィックスで指定できます。The size of the integer pointed at can be controlled by an argument size specification prefix. n 指定子は既定で無効になっています。詳細については、重要なセキュリティに関するメモをご覧ください。The n specifier is disabled by default; for information see the important security note.
pp [ポインターの種類]Pointer type 引数を 16 進数字のアドレスとして表示します。Displays the argument as an address in hexadecimal digits.
ss StringString printf 関数で使用する場合は 1 バイト文字またはマルチバイト文字の文字列を指定し、wprintf 関数で使用する場合はワイド文字の文字列を指定します。When used with printf functions, specifies a single-byte or multi-byte character string; when used with wprintf functions, specifies a wide-character string. 文字は、最初の null 文字が現れるか、precision 値に達するまで表示されます。Characters are displayed up to the first null character or until the precision value is reached.
SS StringString printf 関数で使用する場合はワイド文字の文字列を指定し、wprintf 関数で使用する場合は 1 バイト文字またはマルチバイト文字の文字列を指定します。When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte or multi-byte character string. 文字は、最初の null 文字が現れるか、precision 値に達するまで表示されます。Characters are displayed up to the first null character or until the precision value is reached.
ZZ ANSI_STRING または UNICODE_STRING 構造体ANSI_STRING or UNICODE_STRING structure 引数として ANSI_STRING または UNICODE_STRING 構造体のアドレスを渡すと、構造体の Buffer フィールドがポイントしているバッファーに含まれる文字列が表示されます。When the address of an ANSI_STRING or UNICODE_STRING structure is passed as the argument, displays the string contained in the buffer pointed to by the Buffer field of the structure. size 修飾子のプレフィックスに w を使用して (たとえば %wZ)、UNICODE_STRING 引数を指定できます。Use a size modifier prefix of w to specify a UNICODE_STRING argument—for example, %wZ. 構造体の Length フィールドには、文字列の長さ (バイト単位) を設定する必要があります。The Length field of the structure must be set to the length, in bytes, of the string. 構造体の MaximumLength フィールドには、バッファーの長さ (バイト単位) を設定する必要があります。The MaximumLength field of the structure must be set to the length, in bytes, of the buffer.

通常、type 文字 Z は、dbgPrintkdPrint など、変換指定を使用するドライバー デバッグ関数でのみ使用します。Typically, the Z type character is used only in driver debugging functions that use a conversion specification, such as dbgPrint and kdPrint.

Visual Studio 2015 以降では、浮動小数点の変換指定子に対応する引数 (aA e E f F g G) が無限、不定値、または NaN の場合、書式設定される出力は C99 標準に準拠します。Starting in Visual Studio 2015, if the argument that corresponds to a floating-point conversion specifier (a, A, e, E, f, F, g, G) is infinite, indefinite, or NaN, the formatted output conforms to the C99 standard. 書式設定された出力を次の表に示します。This table lists the formatted output:

[値]Value OutputOutput
infinityinfinity inf
クワイエット型 NaNQuiet NaN nan
シグナル型 NaNSignaling NaN nan(snan)
不定値 NaNIndefinite NaN nan(ind)

これらの値にはすべて、プレフィックスとして符号が付けられます。Any of these values may be prefixed by a sign. 浮動小数点の type 変換指定子文字が大文字の場合、出力も大文字で書式設定されます。If a floating-point type conversion specifier character is a capital letter, then the output is also formatted in capital letters. たとえば、書式指定子が %f ではなく %F の場合、無限大は inf ではなく INF のように書式設定されます。For example, if the format specifier is %F instead of %f, an infinity is formatted as INF instead of inf. scanf 関数は、これらの文字列も解析できるため、printf 関数と scanf 関数でこれらの値をラウンドトリップすることができます。The scanf functions can also parse these strings, so these values can make a round trip through printf and scanf functions.

Visual Studio 2015 より前のバージョンでは、CRT で無限大、不定値、NaN の値の出力に対して、次のような非標準の別形式が使用されていました。Before Visual Studio 2015, the CRT used a different, non-standard format for output of infinite, indefinite, and NaN values:

[値]Value OutputOutput
+ 無限大+ infinity 1.#INF ランダムな桁1.#INF random-digits
- 無限大- infinity -1.#INF ランダムな桁-1.#INF random-digits
不定 (quiet NaN と同じ)Indefinite (same as quiet NaN) .#IND ランダムな桁digit .#IND random-digits
NaNNaN .#NAN ランダムな桁digit .#NAN random-digits

これらにはすべて、プレフィックスとして符号を付けることができました。また、フィールドの幅と有効桁数によっては書式が若干異なることもあり、通常とは違う結果をもたらす場合がありました。Any of these may have been prefixed by a sign, and may have been formatted slightly differently depending on field width and precision, sometimes with unusual effects. たとえば、printf("%.2f\n", INFINITY)1.#J のように出力されました。これは、#INF の有効桁数が 2 桁に "丸められた" ためです。For example, printf("%.2f\n", INFINITY) would print 1.#J because the #INF would be "rounded" to 2 digits of precision.

注意

%s または %S に対応する引数、あるいは %Z に対応する引数の Buffer フィールドが null ポインターの場合は、"(null)" が表示されます。If the argument that corresponds to %s or %S, or the Buffer field of the argument that corresponds to %Z, is a null pointer, "(null)" is displayed.

注意

すべての指数形式で、表示される指数部の桁数の最小値は 2 です。必要な場合にのみ 3 を使用できます。In all exponential formats, the minimum number of digits of exponent to display is two, using three only if necessary. Visual Studio 2013 以前のバージョン向けに記述されたコードとの下位互換性を維持するために、_set_output_format 関数を使用して、表示される桁数を 3 に設定できます。By using the _set_output_format function, you can set the number of digits displayed to three for backward compatibility with code written for Visual Studio 2013 and before.

重要

書式 %n は本質的にセキュリティが万全でないため、既定で無効になっています。Because the %n format is inherently insecure, it is disabled by default. 書式設定文字列に %n がある場合は、「パラメーターの検証」で説明されているとおり、無効なパラメーター ハンドラーが呼び出されます。If %n is encountered in a format string, the invalid parameter handler is invoked, as described in Parameter Validation. %n のサポートを有効にする方法については、「_set_printf_count_output」をご覧ください。To enable %n support, see _set_printf_count_output.

フラグ ディレクティブFlag directives

変換指定の最初の省略可能フィールドには "フラグ ディレクティブ" を指定します。フラグ ディレクティブとは、出力の配置を指定し、記号、空白、先頭のゼロ、小数点、8 進数プレフィックス、および 16 進数プレフィックスの出力を制御するための 0 個以上のフラグ文字です。The first optional field in a conversion specification contains flag directives, zero or more flag characters that specify output justification and control output of signs, blanks, leading zeros, decimal points, and octal and hexadecimal prefixes. 変換指定には、複数のフラグ ディレクティブを設定できます。フラグは任意の順序で設定できます。More than one flag directive may appear in a conversion specification, and the flag characters can appear in any order.

フラグ文字Flag characters

フラグFlag 説明Meaning 既定値Default
- 指定されたフィールド幅内で結果を左揃えにします。Left align the result within the given field width. 右揃えにします。Right align.
+ 符号付きの場合に出力値にプレフィックスを付けるには、記号 (+ または -) を使用します。Use a sign (+ or -) to prefix the output value if it is of a signed type. 記号は、マイナス記号 (-) 付きの値にのみ表示されます。Sign appears only for negative signed values (-).
00 width0 というプレフィックスが付いている場合、最小幅に到達するまで先頭にゼロが追加されます。If width is prefixed by 0, leading zeros are added until the minimum width is reached. 0- の両方がある場合、0 は無視されます。If both 0 and - appear, the 0 is ignored. 0 が整数形式 (iuxXod) で指定され、有効桁数も指定されている場合 (%04.d など)、0 は無視されます。If 0 is specified for an integer format (i, u, x, X, o, d) and a precision specification is also present—for example, %04.d—the 0 is ignored. 0a または A の浮動小数点数形式で指定されている場合、0x または 0X プレフィックスの後、仮数部の先頭にゼロが付加されます。If 0 is specified for the a or A floating-point format, leading zeros are prepended to the mantissa, after the 0x or 0X prefix. パディングなし。No padding.
空白 (' ')blank (' ') 記号付きでプラスの場合に出力値にプレフィックスを付けるには、空白を使用します。Use a blank to prefix the output value if it is signed and positive. 空白と + フラグの両方が表示される場合、空白は無視されます。The blank is ignored if both the blank and + flags appear. 空白は表示されません。No blank appears.
# 書式 ox、または X# フラグを使用すると、それぞれ 0、0x、0X を使用して、ゼロ以外の出力値にプレフィックスが付加されます。When it's used with the o, x, or X format, the # flag uses 0, 0x, or 0X, respectively, to prefix any nonzero output value. 空白は表示されません。No blank appears.
書式 eEfFaA# フラグを使用すると、出力値に強制的に小数点が追加されます。When it's used with the e, E, f, F, a, or A format, the # flag forces the output value to contain a decimal point. 小数点は、数字が続く場合にのみ表示されます。Decimal point appears only if digits follow it.
書式 g または G# フラグを使用すると、出力値に強制的に小数点が追加され、後続のゼロの切り捨ては行われません。When it's used with the g or G format, the # flag forces the output value to contain a decimal point and prevents the truncation of trailing zeros.

cdius で使用された場合は無視されます。Ignored when used with c, d, i, u, or s.
小数点は、数字が続く場合にのみ表示されます。Decimal point appears only if digits follow it. 後続のゼロは切り詰められます。Trailing zeros are truncated.

幅指定Width specification

変換指定では、省略可能な幅指定フィールドを flags 文字の後に指定します。In a conversion specification, the optional width specification field appears after any flags characters. width 引数には、負でない 10 進整数で、出力される最小文字数を指定します。The width argument is a non-negative decimal integer that controls the minimum number of characters that are output. 出力値の文字数が指定された幅よりも小さい場合は、最小文字数に到達するまで値の左または右に空白が追加されます。左か右かは、左揃えのフラグ ( - ) が指定されているかどうかによって決まります。If the number of characters in the output value is less than the specified width, blanks are added to the left or the right of the values—depending on whether the left-alignment flag (-) is specified—until the minimum width is reached. width にプレフィックスとして 0 がある場合は、無限大または NaN への変換を除いて、最小文字数に到達するまで整数または浮動小数点数の変換の先頭にゼロが追加されます。If width is prefixed by 0, leading zeros are added to integer or floating-point conversions until the minimum width is reached, except when conversion is to an infinity or NaN.

幅指定では、値の切り捨ては行われません。The width specification never causes a value to be truncated. 出力値の文字数が指定された幅よりも大きい場合、または width が指定されていない場合は、値のすべての文字が出力され、precision 指定が適用されます。If the number of characters in the output value is greater than the specified width, or if width isn't given, all characters of the value are output, subject to the precision specification.

幅指定がアスタリスク (*) の場合は、引数リストから int 引数によって値が提供されます。If the width specification is an asterisk (*), an int argument from the argument list supplies the value. 次の例で示すように、引数リストでは、書式設定される値の前に width 引数を指定する必要があります。The width argument must precede the value that's being formatted in the argument list, as shown in this example:

printf("%0*d", 5, 3); /* 00003 is output */

変換指定に width の値がないか、あっても小さい場合、出力値の切り捨ては行われません。A missing or small width value in a conversion specification doesn't cause the truncation of an output value. 変換の結果が width の値より大きい場合は、変換結果が含まれるようにフィールドが拡張されます。If the result of a conversion is wider than the width value, the field expands to contain the conversion result.

精度指定Precision specification

変換指定の 3 番目の省略可能フィールドは精度指定です。In a conversion specification, the third optional field is the precision specification. これはピリオド (.) とそれに続く負ではない 10 進整数から構成されます。これは、変換の種類に応じて、出力される文字列の文字数、小数点以下桁数、または有効桁数を指定します。It consists of a period (.) followed by a non-negative decimal integer that, depending on the conversion type, specifies the number of string characters, the number of decimal places, or the number of significant digits to be output.

幅指定とは異なり、精度指定では、出力値が切り捨てられることや、浮動小数点値が丸め処理される場合があります。Unlike the width specification, the precision specification can cause either truncation of the output value or rounding of a floating-point value. 次の例に示すように、precision が 0 に指定され、変換される値が 0 の場合、結果には文字の出力はありません。If precision is specified as 0, and the value to be converted is 0, the result is no characters output, as shown in this example:

printf( "%.0d", 0 ); /* No characters output */

精度指定がアスタリスク (*) の場合は、引数リストから int 引数によって値が提供されます。If the precision specification is an asterisk (*), an int argument from the argument list supplies the value. 次の例に示すように、引数リストでは、書式設定される値の前に precision 引数を指定する必要があります。In the argument list, the precision argument must precede the value that's being formatted, as shown in this example:

printf( "%.*f", 3, 3.14159265 ); /* 3.142 output */

次の表に示すように、type によって、precision の解釈、または precision が省略されている場合の既定の有効桁数 (精度) が決まります。The type character determines either the interpretation of precision or the default precision when precision is omitted, as shown in the following table.

有効桁数の値が型に与える影響How Precision Values Affect Type

Type 説明Meaning 既定値Default
aAa, A 有効桁数は、小数点より後の桁数を指定します。The precision specifies the number of digits after the point. 既定の有効桁数は 13 です。Default precision is 13. 有効桁数が 0 の場合、 # フラグが使用されていない限り、小数点は出力されません。If precision is 0, no decimal point is printed unless the # flag is used.
cCc, C 有効桁数式が無効です。The precision has no effect. 文字が印刷されます。Character is printed.
di o u x Xd, i, o, u, x, X 有効桁数は、印刷する最小桁数を指定します。The precision specifies the minimum number of digits to be printed. 引数の桁数が precision より少ない場合、出力値の左側が 0 で埋められます。If the number of digits in the argument is less than precision, the output value is padded on the left with zeros. 桁数が precision を超えても、値は切り捨てられません。The value is not truncated when the number of digits exceeds precision. 既定の有効桁数は 1 です。Default precision is 1.
eEe, E 有効桁数は、小数点より後の印刷する桁数を指定します。The precision specifies the number of digits to be printed after the decimal point. 最後に印刷される桁は丸め処理されます。The last printed digit is rounded. 既定の有効桁数は 6 です。Default precision is 6. precision が 0 であるか、ピリオド (.) の後に数字が続いていない場合、小数点は出力されません。If precision is 0 or the period (.) appears without a number following it, no decimal point is printed.
fFf, F 有効桁数の値は、小数点より後の桁数を指定します。The precision value specifies the number of digits after the decimal point. 小数点が表示されたら、その前に、少なくとも 1 つの桁が表示されます。If a decimal point appears, at least one digit appears before it. 値は、適切な桁数に丸め処理されます。The value is rounded to the appropriate number of digits. 既定の有効桁数は 6 です。Default precision is 6. precision が 0 であるか、ピリオド (.) の後に数字が続いていない場合、小数点は出力されません。If precision is 0, or if the period (.) appears without a number following it, no decimal point is printed.
gGg, G 有効桁数は、印刷する最大有効桁数を指定します。The precision specifies the maximum number of significant digits printed. 6 つの有効桁数が印刷され、後続の 0 が切り捨てられます。Six significant digits are printed, and any trailing zeros are truncated.
sSs, S 有効桁数は、印刷する最大文字数を指定します。The precision specifies the maximum number of characters to be printed. precision を超える分の文字は出力されません。Characters in excess of precision aren't printed. 文字は Null 文字が出現するまで印刷されます。Characters are printed until a null character is encountered.

引数サイズ指定Argument size specification

変換指定の size フィールドは、type 変換指定子の引数長さ修飾子です。In a conversion specification, the size field is an argument length modifier for the type conversion specifier. type フィールドの size フィールド プレフィックス (hhhjl (小文字の L)、LlltwzI (大文字の i)、I32、および I64) は、修飾する変換指定子に応じて、対応する引数の "サイズ" (long、short、32 ビット、64 ビット、1 バイト、またはワイド文字) を指定します。The size field prefixes to the type field—hh, h, j, l (lowercase L), L, ll, t, w, z, I (uppercase i), I32, and I64—specify the "size" of the corresponding argument—long or short, 32-bit or 64-bit, single-byte character or wide character—depending on the conversion specifier that they modify. 次の表に示すように、printf 系の関数および wprintf 系の関数では、これらのサイズ プレフィックスを type 文字と共に使用して、引数のサイズの解釈を指定できます。These size prefixes are used with type characters in the printf and wprintf families of functions to specify the interpretation of argument sizes, as shown in the following table. 一部の引数型においては、size フィールドは省略可能です。The size field is optional for some argument types. サイズ プレフィックスを指定しない場合、フォーマッタは整数の引数 (たとえば、符号付きまたは符号なしの charshortintlong および列挙型) を 32 ビットの int 型として使用します。また、浮動小数点引数 floatdouble、および long double を 64 ビットの double 型として使用します。When no size prefix is specified, the formatter consumes integer arguments—for example, signed or unsigned char, short, int, long, and enumeration types—as 32-bit int types, and float, double, and long double floating-point arguments are consumed as 64-bit double types. この動作は、可変引数リストの既定の引数の昇格規則と一致します。This behavior matches the default argument promotion rules for variable argument lists. 引数の昇格の詳細については、「Postfix expressions」 (後置式) の「省略記号と既定の引数」に関するページを参照してください。For more information about argument promotion, see Ellipses and Default Arguments in Postfix expressions. 32 ビット システムと 64 ビット システムの両方で、64 ビット整数の引数の変換指定には ll または I64 のサイズ プレフィックスを含める必要があります。On both 32-bit and 64-bit systems, the conversion specification of a 64-bit integer argument must include a size prefix of ll or I64. それ以外の場合はフォーマッタの動作は未定義になります。Otherwise, the behavior of the formatter is undefined.

32 ビットおよび 64 ビットのコードでは、一部の型のサイズは異なります。Some types are different sizes in 32-bit and 64-bit code. たとえば、 size_t は x86 用にコンパイルされたコードでは 32 ビットですが、 x64 用にコンパイルされたコードでは 64 ビットになります。For example, size_t is 32 bits long in code compiled for x86, and 64 bits in code compiled for x64. 可変幅の型がプラットフォームに依存しない書式設定コードを作成するには、可変幅引数サイズ修飾子を使用します。To create platform-agnostic formatting code for variable-width types, you can use a variable-width argument size modifier. または、64 ビットの引数サイズ修飾子を使用して、可変幅引数の型を明示的に 64 ビットに昇格させます。Alternatively, use a 64-bit argument size modifier and explicitly promote the variable-width argument type to 64 bits. Microsoft 固有の I (大文字の i) 引数サイズ修飾子は可変幅の整数の引数を処理しますが、移植性を考慮して、型に固有の jt、および z 修飾子を使用することをお勧めします。The Microsoft-specific I (uppercase i) argument size modifier handles variable-width integer arguments, but we recommend the type-specific j, t, and z modifiers for portability.

printf および wprintf の書式型指定子のサイズ プレフィックスSize Prefixes for printf and wprintf Format-Type Specifiers

指定する型To specify プリフィックスUse prefix 型指定子With type specifier
char
unsigned char
hhhh dioux、または Xd, i, o, u, x, or X
short int
short unsigned int
hh dioux、または Xd, i, o, u, x, or X
__int32
unsigned __int32
I32I32 dioux、または Xd, i, o, u, x, or X
__int64
unsigned __int64
I64I64 dioux、または Xd, i, o, u, x, or X
intmax_t
uintmax_t
j または I64j or I64 dioux、または Xd, i, o, u, x, or X
long double l (小文字の L) または Ll (lowercase L) or L aAeEfFg、または Ga, A, e, E, f, F, g, or G
long int
long unsigned int
l (小文字の L)l (lowercase L) dioux、または Xd, i, o, u, x, or X
long long int
unsigned long long int
ll (小文字の LL)ll (lowercase LL) dioux、または Xd, i, o, u, x, or X
ptrdiff_t t または I (大文字の i)t or I (uppercase i) dioux、または Xd, i, o, u, x, or X
size_t z または I (大文字の i)z or I (uppercase i) dioux、または Xd, i, o, u, x, or X
1 バイト文字Single-byte character hh c または Cc or C
ワイド文字Wide character l (小文字の L) または wl (lowercase L) or w c または Cc or C
1 バイト文字の文字列Single-byte character string hh sS、または Zs, S, or Z
ワイド文字列の文字列Wide-character string l (小文字の L) または wl (lowercase L) or w sS、または Zs, S, or Z

ptrdiff_tsize_t は、32 ビット プラットフォーム上では __int32 または unsigned __int32、64 ビット プラットフォーム上では __int64 または unsigned __int64 です。The ptrdiff_t and size_t types are __int32 or unsigned __int32 on 32-bit platforms, and __int64 or unsigned __int64 on 64-bit platforms. サイズ プレフィックス I (大文字の i)、jtz は、プラットフォームに適切な引数の幅を受け取ります。The I (uppercase i), j, t, and z size prefixes take the correct argument width for the platform.

Visual C++ では、long double は別個の型ですが、これには double と同じ内部表現があります。In Visual C++, although long double is a distinct type, it has the same internal representation as double.

型指定子 hc または hC は、printf 関数の c および wprintf 関数の C と同じ意味です。An hc or hC type specifier is synonymous with c in printf functions and with C in wprintf functions. 型指定子 lclCwcwC は、printf 関数の C および wprintf 関数の c と同じ意味です。An lc, lC, wc, or wC type specifier is synonymous with C in printf functions and with c in wprintf functions. 型指定子 hs または hS は、printf 関数の s および wprintf 関数の S と同じ意味です。An hs or hS type specifier is synonymous with s in printf functions and with S in wprintf functions. 型指定子 lslSwswS は、printf 関数の S および wprintf 関数の s と同じ意味です。An ls, lS, ws or wS type specifier is synonymous with S in printf functions and with s in wprintf functions.

注意

Microsoft 固有 引数サイズ修飾子 I (小文字の i)、I32I64、および w は Microsoft の拡張機能で、ISO C とは互換性がありません。Microsoft Specific The I (uppercase i), I32, I64, and w argument size modifier prefixes are Microsoft extensions and are not ISO C-compatible. プレフィックス h (char 型のデータと共に使用する場合)、および l (L の小文字) プレフィックス (double 型のデータと共に使用する場合) は Microsoft の拡張機能です。The h prefix when it's used with data of type char and the l (lowercase L) prefix when it's used with data of type double are Microsoft extensions.

関連項目See also

printf、_printf_l、wprintf、_wprintf_lprintf, _printf_l, wprintf, _wprintf_l
printf_s、_printf_s_l、wprintf_s、_wprintf_s_lprintf_s, _printf_s_l, wprintf_s, _wprintf_s_l
printf_p の位置指定パラメーターprintf_p Positional Parameters