書式指定構文: 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

変換指定の各フィールドには、特定の書式オプションまたは変換指定子を示す文字または数値を設定します。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 );

注意

Visual Studio 2015 では printfscanf 関数のとファミリはとして宣言され inline 、との各ヘッダーに移動されました <stdio.h> <conio.h>In Visual Studio 2015 The printf and scanf family of functions were declared as inline and moved to the <stdio.h> and <conio.h> headers. 古いコードを移行する場合、これらの関数との接続に LNK2019 が表示されることがあります。If you are migrating older code you might see LNK2019 in connection with these functions. 詳細については、「 Visual C++ change history 2003-2015」を参照してください。For more information, see Visual C++ change history 2003 - 2015.

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 s S 書式設定関数に応じて、またはを使用して、1バイト文字と複数バイトの文字列またはワイド文字列を指定します。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 は、 char ファミリ関数ではおよびとして解釈され、ファミリ関数ではとして解釈され char* printf wchar_t wchar_t* wprintf ます。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 は、 wchar_t ファミリ関数ではおよびとして解釈され、ファミリ関数ではとして解釈され wchar_t* printf char char* wprintf ます。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.

、、、、およびそのバリアントなどの整数型は、、、、、、 short int long long long unsigned およびを使用して指定し d i o u x X ます。Integer types such as short, int, long, long long, and their unsigned variants, are specified by using d , i , o , u , x , and X . 、、などの浮動小数点型は、、、、、、、 float double long double 、およびを使用して指定し a A e E f F g G ます。Floating-point types such as float, double, and long double , are specified by using a , A , e , E , f , F , g , and G . 既定では、 サイズ のプレフィックスによって変更されない限り、整数引数は型に強制変換され、 int 浮動小数点引数はに強制変換され double ます。By default, unless they're modified by a size prefix, integer arguments are coerced to int type, and floating-point arguments are coerced to double. 64ビットシステムで int は、は32ビット値であるため、 I64サイズ プレフィックスが使用されていない限り、64ビット整数は出力用に ll 書式設定されると切り捨てられます。On 64-bit systems, an int is a 32-bit value; so, 64-bit integers will be truncated when they're 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 固有:Microsoft-specific:
Z 型文字、および c 関数と C s 関数で使用される場合の、、、および型文字の動作は、 S printf wprintf Microsoft の拡張機能です。The Z type character, and the behavior of the c , C , s , and S type characters when they're used with the printf and wprintf functions, are Microsoft extensions. ISO C 規格では cs すべての書式設定関数で、ナロー文字と文字列、およびワイド文字および文字列に対して、およびが一貫して使用されて C S います。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
c 文字Character printf 関数で使用する場合は 1 バイト文字を指定し、wprintf 関数で使用する場合はワイド文字を指定します。When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.
C 文字Character printf 関数で使用する場合はワイド文字を指定し、wprintf 関数で使用する場合は 1 バイト文字を指定します。When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.
d IntegerInteger 符号付き 10 進整数。Signed decimal integer.
i IntegerInteger 符号付き 10 進整数。Signed decimal integer.
o IntegerInteger 符号なし 8 進整数。Unsigned octal integer.
u IntegerInteger 符号なし 10 進整数。Unsigned decimal integer.
x IntegerInteger 符号なし16進整数。" abcdef " を使用します。Unsigned hexadecimal integer; uses "abcdef".
X IntegerInteger 符号なし16進整数。" ABCDEF " を使用します。Unsigned hexadecimal integer; uses "ABCDEF".
e 浮動小数点数Floating-point [-] E ±] の形式の符号付きの値。は1桁の10進数、は d.dddd dd [ d d 指定し 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.
E 浮動小数点数Floating-point e 指数部を導入するの E ではなく、という形式と同じです eIdentical to the e format except that E rather than e introduces the exponent.
f 浮動小数点数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.
F 浮動小数点数Floating-point f 無限大と nan の出力が大文字になる点を除いて、形式と同じです。Identical to the f format except that infinity and nan output is capitalized.
g 浮動小数点数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.
G 浮動小数点数Floating-point 形式と同じですが、で g E はなく、 e 指数部 (該当する場合) が導入されています。Identical to the g format, except that E , rather than e , introduces the exponent (where appropriate).
a 浮動小数点数Floating-point [-] 0xhp ± の形式の符号付き16進倍精度浮動小数点値。 dd 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.
A 浮動小数点数Floating-point [-] 0xhP ± の形式の符号付き16進倍精度浮動小数点値。 dd 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.
n 整数へのポインター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.
p [ポインターの種類]Pointer type 引数を16進数字のアドレスとして表示します。Display the argument as an address in hexadecimal digits.
s 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.
S 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.
Z 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, display the string contained in the buffer pointed to by the Buffer field of the structure. サイズ 修飾子プレフィックスを使用し w UNICODE_STRING て、引数を指定します (例:) %wZUse 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.

通常、 Z 型文字は、やなどの変換仕様を使用するドライバーデバッグ関数でのみ使用され dbgPrint kdPrint ます。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 以降では、浮動小数点の変換指定子 (、、、、、、、) に対応する引数 a A 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 出力Output
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 出力Output
+ 無限大+ 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 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) prints 1.#J because the #INF would be "rounded" to two 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. 関数を使用 _set_output_format すると、Visual Studio 2013 との間に記述されたコードとの下位互換性のために、表示される数字の数を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's 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_outputTo 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 DefaultDefault
- 指定されたフィールド幅内で結果を左揃えにします。Left align the result within the given field width. 右揃えにします。Right align.
+ 符号付きの型の場合は、符号 (+ または-) を使用して出力値の前に付加します。Use a sign (+ or -) to prefix the output value if it's of a signed type. 記号は、マイナス記号 (-) 付きの値にのみ表示されます。Sign appears only for negative signed values (-).
0 Width にプレフィックスが付いている場合は、 0 最小の幅に達するまで先頭のゼロが追加されます。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 が整数形式 (、、、、、) に対して指定され i ていて、 u x X o d 精度指定も存在する場合 (例 %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. 0 または浮動小数点形式にが指定されている場合、 a 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's signed and positive. 空白と + フラグの両方が表示される場合、空白は無視されます。The blank is ignored if both the blank and + flags appear. 空白は表示されません。No blank appears.
# 、、またはのいずれかの形式で使用する場合、 o x X # フラグはそれぞれ、、、またはを使用して、 0 0x 0X 0 以外の出力値にプレフィックスを付けます。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.
e 、、 E fFa 、またはのいずれかの形式で使用する場合 A# フラグは出力値に小数点を強制的に含めます。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.

c 、、、、またはと共に使用する場合は無視さ d i u s れます。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 が指定されていない場合、 精度 指定に従って、値のすべての文字が出力されます。If the number of characters in the output value is greater than the specified width, or if width isn't provided, 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. 有効桁数 を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

TypeType 説明Meaning DefaultDefault
a , Aa , 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.
c , Cc , C 有効桁数式が無効です。The precision has no effect. 文字が印刷されます。Character is printed.
d , i , 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. 桁数が 有効桁数 を超えた場合、値は切り捨てられません。The value isn't truncated when the number of digits exceeds precision . 既定の有効桁数は 1 です。Default precision is 1.
e , Ee , 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. 有効桁数 が0の場合、またはピリオド () の後に数字がない場合は . 、小数点は出力されません。If precision is 0 or the period (.) appears without a number following it, no decimal point is printed.
f , Ff , 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. 有効桁数 が0の場合、またはピリオド () の後に数字がない場合は . 、小数点は出力されません。If precision is 0, or if the period (.) appears without a number following it, no decimal point is printed.
g , Gg , G 有効桁数は、印刷する最大有効桁数を指定します。The precision specifies the maximum number of significant digits printed. 6 つの有効桁数が印刷され、後続の 0 が切り捨てられます。Six significant digits are printed, and any trailing zeros are truncated.
s , Ss , 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 found.

引数サイズ指定Argument size specification

変換指定の size フィールドは、 type 変換指定子の引数長さ修飾子です。In a conversion specification, the size field is an argument length modifier for the type conversion specifier. フィールド (、、 size hh h jl (小文字 L)、、、、 L ll t wzI (大文字 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. 引数の昇格の詳細については、 後置式の「省略記号と既定の引数」を参照してください。For more information about argument promotion, see Ellipsis 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ビットに昇格させます。Instead, 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
hh dioux 、または Xd , i , o , u , x , or X
short int
short unsigned int
h dioux 、または Xd , i , o , u , x , or X
__int32
unsigned __int32
I32 dioux 、または Xd , i , o , u , x , or X
__int64
unsigned __int64
I64 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 a 、、、、、、、 A e E f F g または 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 or I (大文字の i)t or I (uppercase i) dioux 、または Xd , i , o , u , x , or X
size_t z or I (大文字の i)z or I (uppercase i) dioux 、または Xd , i , o , u , x , or X
1 バイト文字Single-byte character h c または Cc or C
ワイド文字Wide character l (小文字の L) または wl (lowercase L) or w c または Cc or C
1 バイト文字の文字列Single-byte character string h 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)、 j 、、およびの各サイズプレフィックスは、 t z プラットフォームに対して正しい引数の幅を受け取ります。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 型指定子は、 c 関数では printfC wprintf 関数ではと同義です。An hc or hC type specifier is synonymous with c in printf functions and with C in wprintf functions. lc 、、 lC wc 、または wC 型指定子は、 C printf 関数と関数 c wprintf ので同義です。A lc , lC , wc , or wC type specifier is synonymous with C in printf functions and with c in wprintf functions. hs または hS 型指定子は、 s 関数では printfS wprintf 関数ではと同義です。An hs or hS type specifier is synonymous with s in printf functions and with S in wprintf functions. ls 、、 lS ws 、または wS 型指定子は、 S printf 関数と関数 s wprintf ので同義です。An ls , lS , ws , or wS type specifier is synonymous with S in printf functions and with s in wprintf functions.

注意

Microsoft 固有:Microsoft-specific:
I (大文字 i)、 I32I64 、および引数の w サイズ修飾子プレフィックスは Microsoft 拡張機能であり、ISO C 互換ではありません。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_l
printf_s, _printf_s_l, wprintf_s, _wprintf_s_l
printf_p 位置指定パラメーターprintf_p Positional Parameters