_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l

標準出力ストリームに書式付きで出力します。書式指定文字列でのパラメーターの使用順序を指定できます。

構文

int _printf_p(
   const char *format [,
   argument]...
);
int _printf_p_l(
   const char *format,
   _locale_t locale [,
   argument]...
);
int _wprintf_p(
   const wchar_t *format [,
   argument]...
);
int _wprintf_p_l(
   const wchar_t *format,
   _locale_t locale [,
   argument]...
);

パラメーター

format
書式指定文字列。

argument
省略可能な引数。

locale
使用するロケール。

戻り値

出力した文字数を返します。エラーが発生した場合は負の値を返します。

解説

_printf_p 関数は、一連の文字や値の書式を指定し、標準出力ストリーム stdout に出力します。 format 文字列の後に引数を指定する場合は、format 文字列に引数の出力形式を指定する必要があります (「printf_p の位置指定パラメーター」を参照してください)。

_printf_pprintf_s の違いは、_printf_p では位置指定パラメーターをサポートし、これによって、書式指定文字列で引数を使用する順序を指定できることです。 詳細については、「printf_p の位置指定パラメーター」をご覧ください。

_wprintf_p_printf_p のワイド文字バージョンであり、ストリームが ANSI モードで開いている場合、これらの動作は同じです。 _printf_p では、UNICODE ストリームへの出力はサポートされていません。

これらの関数のうち _l サフィックスが付けられたバージョンは、現在のスレッド ロケールの代わりに渡されたロケール パラメーターを使用する点を除いて同じです。

重要

format にユーザー定義の文字列を指定しないでください。

書式指定文字列またはargument書式指定文字列に無効な書式指定文字がNULL含まれている場合format_printf_p関数_wprintf_pはパラメーターの検証の説明に従って無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、この関数は -1 を返し、 errnoEINVALに設定します。

汎用テキスト ルーチンのマップ

Tchar.h のルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tprintf_p _printf_p _printf_p _wprintf_p
_tprintf_p_l _printf_p_l _printf_p_l _wprintf_p_l

必要条件

ルーチンによって返される値 必須ヘッダー
_printf_p, _printf_p_l <stdio.h>
_wprintf_p, _wprintf_p_l <stdio.h> または <wchar.h>

ユニバーサル Windows プラットフォーム (UWP) アプリではコンソールがサポートされていません。 コンソール (stdinstdoutstderr) に関連付けられている標準ストリームのハンドルは、C ランタイム関数によって UWP アプリで使用される前に、リダイレクトする必要があります。 互換性の詳細については、「 Compatibility」を参照してください。

重要

Windows 10 バージョン 2004 (ビルド 19041) 以降の printf ファミリの関数では、丸め処理の IEEE 754 の規則に従って、正確に表現可能な浮動小数点数が出力されます。 以前のバージョンの Windows では、"5" で終わる正確に表現可能な浮動小数点数は常に切り上げられていました。 IEEE 754 では、最も近い偶数に丸める ("銀行型丸め" とも呼ばれます) 必要があることが示されています。 たとえば、printf("%1.0f", 1.5)printf("%1.0f", 2.5) の両方を 2 に丸める必要があります。 以前は、1.5 は 2 に、2.5 は 3 に丸められていました。 この変更は、正確に表現可能な数値にのみ影響します。 たとえば、2.35 (メモリで表される場合は 2.35000000000000008 に近い) は、2.4 に切り上げられます。 これらの関数によって実行される丸め処理では、fesetround によって設定された浮動小数点丸めモードにも従うようになりました。 以前は、丸め処理には常に FE_TONEAREST の動作が選択されていました。 この変更は、Visual Studio 2019 バージョン 16.2 以降を使用してビルドされたプログラムにのみ影響します。 従来の浮動小数点丸め動作を使用するには、legacy_stdio_float_rounding.obj にリンクします。

// crt_printf_p.c
// This program uses the _printf_p and _wprintf_p
// functions to choose the order in which parameters
// are used.

#include <stdio.h>

int main( void )
{
   // Positional arguments
   _printf_p( "Specifying the order: %2$s %3$s %1$s %4$s %5$s.\n",
              "little", "I'm", "a", "tea", "pot");

   // Resume arguments
   _wprintf_p( L"Reusing arguments: %1$d %1$d %1$d %1$d\n", 10);

   // Width argument
   _printf_p("Width specifiers: %1$*2$s", "Hello\n", 10);
}
Specifying the order: I'm a little tea pot.
Reusing arguments: 10 10 10 10
Width specifiers:     Hello

関連項目

数学と浮動小数点のサポート
ストリーム入出力
ロケール
fopen, _wfopen
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_l
fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
vprintf 関数