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.

構文Syntax

int printf_s(
   const char *format [,
   argument]...
);
int _printf_s_l(
   const char *format,
   locale_t locale [,
   argument]...
);
int wprintf_s(
   const wchar_t *format [,
   argument]...
);
int _wprintf_s_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.

RemarksRemarks

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は、typeファイルの出力先ではなく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のワイド文字バージョンです。formatは、ワイド文字列です。wprintf_s is a wide-character version of printf_s; format is a wide-character string. ストリームが ANSI モードで開かれている場合、 wprintf_sprintf_sは同じように動作します。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

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_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.

必要条件Requirements

ルーチンによって返される値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.

Example

// 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):
                 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:   0012FF78

関連項目See also

浮動小数点サポートFloating-Point Support
ストリーム入出力Stream I/O
ロケールLocale
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