printf_s、_printf_s_l、wprintf_s、_wprintf_s_lprintf_s, _printf_s_l, wprintf_s, _wprintf_s_l

標準出力ストリームに書式付きで出力します。Prints formatted output to the standard output stream. これらのバージョンの printf、_printf_l、wprintf、_wprintf_l は、「CRT のセキュリティ機能」にあるとおり、セキュリティが強化されています。These versions of printf, _printf_l, wprintf, _wprintf_l have security enhancements, as described in Security Features in the CRT.


int printf_s(
   const char *format [,
int _printf_s_l(
   const char *format,
   locale_t locale [,
int wprintf_s(
   const wchar_t *format [,
int _wprintf_s_l(
   const wchar_t *format,
   locale_t locale [,


書式指定文字列。Format control.

省略可能な引数。Optional arguments.

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

戻り値Return Value

出力した文字数を返します。エラーが発生した場合は負の値を返します。Returns the number of characters printed, or a negative value if an error occurs.


Printf_s関数は、書式化して、一連の文字と、標準出力ストリームに値を出力stdoutします。The printf_s 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.

主な違いprintf_sprintfされるprintf_s 、有効な書式設定文字の書式指定文字列をチェックがprintf 関数のみ書式指定文字列の null ポインターを確認します。The main difference between printf_s and printf is that printf_s checks the format string for valid formatting characters, whereas printf only checks if the format string is a null pointer. いずれかのチェックが失敗した場合、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。If either check fails, an 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.

についてerrno 、エラー コードを参照してくださいと_doserrno、errno、_sys_errlist、_sys_nerrします。For information on errno and error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

printf_sfprintf_s動作は同じことを除いてprintf_sに出力するstdout の種類の出力先ではなくファイルします。printf_s and fprintf_s behave identically except that printf_s writes output to stdout rather than to a destination of type FILE. 詳細については、「fprintf_s、_fprintf_s_l、fwprintf_s、_fwprintf_s_l」を参照してください。For more information, see fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l.

wprintf_sのワイド文字バージョンは、 printf_s;形式はワイド文字列です。wprintf_s is a wide-character version of printf_s; format is a wide-character string. wprintf_sprintf_sストリームが ANSI モードで開かれている場合の動作は同じです。wprintf_s and printf_s behave identically if the stream is opened in ANSI mode. printf_s UNICODE ストリームへの出力をサポートされていません。printf_s doesn't 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_s_tprintf_s printf_sprintf_s printf_sprintf_s wprintf_swprintf_s
_tprintf_s_l_tprintf_s_l _printf_s_l_printf_s_l _printf_s_l_printf_s_l _wprintf_s_l_wprintf_s_l

形式引数は、通常の文字、エスケープ シーケンスで構成され、(後に引数場合形式) 書式指定。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_s("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_s検出すると、最初の書式指定 (指定されている場合) 後の最初の引数の値に変換形式して出力します。When printf_s 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.


ルーチンによって返される値Routine 必須ヘッダーRequired header
printf_s_printf_s_lprintf_s, _printf_s_l <stdio.h><stdio.h>
wprintf_s_wprintf_s_lwprintf_s, _wprintf_s_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.


// crt_printf_s.c
/* This program uses the printf_s and wprintf_s functions
* to produce formatted output.

#include <stdio.h>

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

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

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

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

   /* Display characters. */

   printf_s("Characters in field (1):\n%10c%5hc%5C%5lc\n", ch, ch, wch, wch);
   wprintf_s(L"Characters in field (2):\n%10C%5hc%5c%5lc\n", ch, ch, wch, wch);

   /* Display strings. */

   printf_s("Strings in field (1):\n%25s\n%25.4hs\n   %S%25.3ls\n",
   string, string, wstring, wstring);
   wprintf_s(L"Strings in field (2):\n%25S\n%25.4hs\n   %s%25.3ls\n",
       string, string, wstring, wstring);

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

   /* Display pointer. */
   printf_s( "\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):
   Unicode                      Uni
Strings in field (2):
   Unicode                      Uni
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

Address as:   0012FF78

関連項目See also

浮動小数点サポートFloating-Point Support
ストリーム入出力Stream I/O
fopen、_wfopenfopen, _wfopen
fprintf、_fprintf_l、fwprintf、_fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_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