printf、_printf_l、wprintf、_wprintf_lprintf, _printf_l, wprintf, _wprintf_l

標準出力ストリームに書式付きで出力します。Prints formatted output to the standard output stream. これらの関数のセキュリティを強化したバージョンを使用できます。「printf_s、_printf_s_l、wprintf_s、_wprintf_s_l」をご覧ください。More secure versions of these functions are available; see printf_s, _printf_s_l, wprintf_s, _wprintf_s_l.

構文Syntax

int printf(
   const char *format [,
   argument]...
);
int _printf_l(
   const char *format,
   locale_t locale [,
   argument]...
);
int wprintf(
   const wchar_t *format [,
   argument]...
);
int _wprintf_l(
   const wchar_t *format,
   locale_t locale [,
   argument]...
);

パラメーターParameters

formatformat
書式指定文字列。Format control.

argumentargument
省略可能な引数。Optional arguments.

localelocale
使用するロケール。The locale to use.

戻り値Return Value

出力した文字数を返します。エラーが発生した場合は負の値を返します。Returns the number of characters printed, or a negative value if an error occurs. FormatNULLの場合は、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーが呼び出されます。If format is NULL, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、この関数は-1 を返し、 errnoEINVALに設定します。If execution is allowed to continue, the function returns -1 and sets errno to EINVAL. EOF (0xffff) が引数で見つかった場合、この関数は-1 を返します。If EOF (0xFFFF) is encountered in argument, the function returns -1.

Errnoとエラーコードの詳細については、「 _doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。For information on errno and error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

解説Remarks

Printf関数は、一連の文字と値を書式設定し、標準出力ストリームであるstdoutに出力します。The printf function formats and prints a series of characters and values to the standard output stream, stdout. 書式指定文字列の後に引数を指定する場合、書式指定文字列には引数の出力形式を決定する仕様が含まれている必要があります。If arguments follow the format string, the format string must contain specifications that determine the output format for the arguments. printffprintfの動作は同じですが、 printfは、型ファイルの出力先ではなくstdoutに出力を書き込みます。printf and fprintf behave identically except that printf writes output to stdout rather than to a destination of type FILE.

wprintfは、ワイド文字バージョンのprintfです。formatは、ワイド文字列です。wprintf is a wide-character version of printf; format is a wide-character string. ストリームが ANSI モードで開かれている場合、 wprintfprintfは同じように動作します。wprintf and printf behave identically if the stream is opened in ANSI mode. 現在、 printfでは UNICODE ストリームへの出力はサポートされていません。printf does not currently support output into a UNICODE stream.

_Lサフィックスを持つこれらの関数のバージョンは、現在のスレッドロケールの代わりに渡されたロケールパラメーターを使用する点を除いて同じです。The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _Unicode が定義されている場合_unicode defined
_tprintf_tprintf printfprintf printfprintf wprintfwprintf

Format引数は、通常の文字、エスケープシーケンス、および (引数が形式の場合) 書式指定形式で構成されます。The format argument consists of ordinary characters, escape sequences, and (if arguments follow format) format specifications. 通常の文字とエスケープシーケンスは、外観の順にstdoutにコピーされます。The ordinary characters and escape sequences are copied to stdout in order of their appearance. たとえば、次の関数を呼び出します。For example, the line:

printf("Line one\n\t\tLine two\n");

この例では、次のように出力されます。produces the output:

Line one
        Line two

書式指定は必ずパーセント記号 () で始まり % 、左から右に読み取られます。Format specifications always begin with a percent sign (%) and are read left to right. Printfが最初の書式指定 (存在する場合) を検出すると、最初の引数の値を書式の後に変換し、それに応じて出力します。When printf encounters the first format specification (if any), it converts the value of the first argument after format and outputs it accordingly. 2 番目の書式指定を見つけると、2 番目の引数を変換して出力します。The second format specification causes the second argument to be converted and output, and so on. 書式指定よりも引数の数が多い場合、余分な引数は無視されます。If there are more arguments than there are format specifications, the extra arguments are ignored. 書式指定より引数が少ないと、結果は予測できません。The results are undefined if there are not enough arguments for all the format specifications.

重要

format にユーザー定義の文字列を指定しないでください。Ensure that format is not a user-defined string.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

Tchar.h のルーチンTchar.h routine _UNICODE および _MBCS が未定義の場合_UNICODE and _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tprintf_tprintf printfprintf printfprintf wprintfwprintf
_tprintf_l_tprintf_l _printf_l_printf_l _printf_l_printf_l _wprintf_l_wprintf_l

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
printf_printf_lprintf, _printf_l <stdio.h>
wprintf_wprintf_lwprintf, _wprintf_l <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

コンソールは、ユニバーサル Windows プラットフォーム (UWP) アプリではサポートされていません。The console is not supported in Universal Windows Platform (UWP) apps. コンソール、 stdinstdout、およびstderrに関連付けられている標準ストリームハンドルは、C ランタイム関数が UWP アプリで使用できるようになる前にリダイレクトする必要があります。The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. 互換性の詳細については、「互換性」を参照してください。For additional compatibility information, see Compatibility.

重要

Windows 10 バージョン 2004 (ビルド 19041) 以降では、 printf 関数ファミリは、丸め処理のために IEEE 754 の規則に従って、正確に表現可能な浮動小数点数を出力します。Starting in Windows 10 version 2004 (build 19041), the printf family of functions prints exactly representable floating point numbers according to the IEEE 754 rules for rounding. 以前のバージョンの Windows では、"5" で終わる厳密に表現可能な浮動小数点数は常に切り上げられます。In previous versions of Windows, exactly representable floating point numbers ending in '5' would always round up. IEEE 754 では、最も近い偶数 ("銀行型丸め" とも呼ばれます) に丸める必要があることが示されています。IEEE 754 states that they must round to the closest even digit (also known as "Banker's Rounding"). たとえば、1.5 と2.5 の両方が2に丸められる必要があります。For example, both 1.5 and 2.5 should round to 2. 以前は、1.5 は2に丸められ、2.5 は3に丸められていました。Previously, 1.5 would round to 2 and 2.5 would round to 3. この変更は、正確に表現できる数値にのみ影響します。This change only affects exactly representable numbers. たとえば、2.35 (メモリで表される場合は2.35000000000000008 に近い) は、2.4 に切り上げられます。For example, 2.35 (which, when represented in memory, is closer to 2.35000000000000008) continues to round up to 2.4. これらの関数によって行われる丸め処理は、 fesetroundによって設定される浮動小数点丸めモードにも反映されるようになりました。Rounding done by these functions now also respects the floating point rounding mode set by fesetround. 以前は、丸め処理は常に FE_TONEAREST の動作を選択していました。Previously, rounding always chose FE_TONEAREST behavior. この変更は、Visual Studio 2019 バージョン16.2 以降を使用してビルドされたプログラムにのみ影響します。This change only affects programs built using Visual Studio 2019 version 16.2 and later. 従来の浮動小数点丸め動作を使用するには、 legacy_stdio_float_rounding .objにリンクします。To use the legacy floating point rounding behavior, link with legacy_stdio_float_rounding.obj.

Example

// crt_printf.c
// This program uses the printf and wprintf functions
// to produce formatted output.

#include <stdio.h>

int main( void )
{
   char     ch = 'h',
            *string = "computer";
   wchar_t  wch = L'w',
            *wstring = L"Unicode";
   int      count = -9234;
   double   fp = 251.7366;

   // Display integers
   printf( "Integer formats:\n"
           "   Decimal: %d  Justified: %.6d  "
           "Unsigned: %u\n",
           count, count, count, count );

   // Display decimals
   printf( "Decimal %d as:\n   Hex: %Xh  "
           "C hex: 0x%x  Octal: %o\n",
            count, count, count, count );

   // Display in different radixes
   printf( "Digits 10 equal:\n   Hex: %i  "
           "Octal: %i  Decimal: %i\n",
            0x10, 010, 10 );

   // Display characters
   printf("Characters in field (1):\n"
          "%10c%5hc%5C%5lc\n",
          ch, ch, wch, wch);
   wprintf(L"Characters in field (2):\n"
           L"%10C%5hc%5c%5lc\n",
           ch, ch, wch, wch);

   // Display strings
   printf("Strings in field (1):\n%25s\n"
          "%25.4hs\n   %S%25.3ls\n",
          string, string, wstring, wstring);
   wprintf(L"Strings in field (2):\n%25S\n"
           L"%25.4hs\n   %s%25.3ls\n",
           string, string, wstring, wstring);

   // Display real numbers
   printf("Real numbers:\n   %f %.2f %e %E\n",
          fp, fp, fp, fp );

   // Display pointer
   printf( "\nAddress as:   %p\n", &count);
}

出力例Sample Output

Integer formats:
   Decimal: -9234  Justified: -009234  Unsigned: 4294958062
Decimal -9234 as:
   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756
Digits 10 equal:
   Hex: 16  Octal: 8  Decimal: 10
Characters in field (1):
         h    h    w    w
Characters in field (2):
         h    h    w    w
Strings in field (1):
                 computer
                     comp
   Unicode                      Uni
Strings in field (2):
                 computer
                     comp
   Unicode                      Uni
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

Address as:   0012FF3C

関連項目See also

書式指定構文: printf 関数と wprintf 関数Format Specification Syntax: printf and wprintf Functions
浮動小数点のサポートFloating-Point Support
ストリーム入出力Stream I/O
LocaleLocale
fopen、_wfopenfopen, _wfopen
_fprintf_p、_fprintf_p_l、_fwprintf_p、_fwprintf_p_l_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
scanf、_scanf_l、wscanf、_wscanf_lscanf, _scanf_l, wscanf, _wscanf_l
sprintf、_sprintf_l、swprintf、_swprintf_l、 _ _swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vprintf 関数vprintf Functions
_set_output_format_set_output_format