_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l

Drukuje sformatowane dane wyjściowe w standardowym strumieniu wyjściowym i umożliwia określenie kolejności, w której parametry są używane w ciągu formatu.Prints formatted output to the standard output stream, and enables specification of the order in which parameters are used in the format string.

SkładniaSyntax

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]...
);

ParametryParameters

Formatowanieformat
Kontrolka formatu.Format control.

argumentargument
Argumenty opcjonalne.Optional arguments.

localelocale
Ustawienia regionalne do użycia.The locale to use.

Wartość zwracanaReturn Value

Zwraca liczbę znaków drukowanych lub wartość ujemną, jeśli wystąpi błąd.Returns the number of characters printed or a negative value if an error occurs.

UwagiRemarks

Funkcja _printf_p formatuje i drukuje serie znaków i wartości do standardowego strumienia wyjściowego stdout.The _printf_p function formats and prints a series of characters and values to the standard output stream, stdout. Jeśli argumenty są zgodne z ciągiem formatu , ciąg formatu musi zawierać specyfikacje, które określają format wyjściowy dla argumentów (zobacz printf_p parametry pozycyjne).If arguments follow the format string, the format string must contain specifications that determine the output format for the arguments (see printf_p Positional Parameters).

Różnica między _printf_p i printf_s jest tym, że _printf_p obsługuje parametry pozycyjne, które umożliwiają określanie kolejności, w której argumenty są używane w ciągu formatu.The difference between _printf_p and printf_s is that _printf_p supports positional parameters, which allows specifying the order in which the arguments are used in the format string. Aby uzyskać więcej informacji, zobacz Printf_p parametry pozycyjne.For more information, see printf_p Positional Parameters.

_wprintf_p to wersja znaku dwubajtowego _printf_p; zachowują się one identycznie, jeśli strumień jest otwarty w trybie ANSI._wprintf_p is the wide-character version of _printf_p; they behave identically if the stream is opened in ANSI mode. _printf_p obecnie nie obsługuje danych wyjściowych w strumieniu Unicode._printf_p doesn't currently support output into a UNICODE stream.

Wersje tych funkcji z sufiksem _l są identyczne, z tą różnicą, że korzystają z przekazaną parametrem ustawień regionalnych zamiast bieżących ustawień regionalnych wątku.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.

Ważne

Upewnij się, że Format nie jest ciągiem zdefiniowanym przez użytkownika.Ensure that format is not a user-defined string.

Jeśli Format lub argument ma wartość null lub ciąg formatu zawiera nieprawidłowe znaki formatowania, funkcje _printf_p i _wprintf_p wywołują procedurę obsługi nieprawidłowego parametru, zgodnie z opisem w walidacji parametru.If format or argument are NULL, or of the format string contains invalid formatting characters, _printf_p and _wprintf_p functions invoke an invalid parameter handler, as described in Parameter Validation. Jeśli wykonanie może być kontynuowane, funkcja zwraca wartość-1 i ustawia errno na EINVAL.If execution is allowed to continue, the function returns -1 and sets errno to EINVAL.

Mapowania procedur zwykłego tekstuGeneric-Text Routine Mappings

Procedura tchar.hTchar.h routine _UNICODE i _MBCS niezdefiniowane_UNICODE and _MBCS not defined _MBCS zdefiniowano_MBCS defined _UNICODE zdefiniowano_UNICODE defined
_tprintf_p_tprintf_p _printf_p_printf_p _printf_p_printf_p _wprintf_p_wprintf_p
_tprintf_p_l_tprintf_p_l _printf_p_l_printf_p_l _printf_p_l_printf_p_l _wprintf_p_l_wprintf_p_l

WymaganiaRequirements

ProceduraRoutine Wymagany nagłówekRequired header
_printf_p, _printf_p_l_printf_p, _printf_p_l <stdio.h>
_wprintf_p, _wprintf_p_l_wprintf_p, _wprintf_p_l <stdio.h> lub <wchar.h><stdio.h> or <wchar.h>

Konsola nie jest obsługiwana w aplikacjach platforma uniwersalna systemu Windows (platformy UWP).The console is not supported in Universal Windows Platform (UWP) apps. Standardowe uchwyty strumienia, które są skojarzone z konsolą, stdin, stdout i stderr, muszą zostać przekierowane przed użyciem funkcji języka C w aplikacjach platformy 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. Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodność.For additional compatibility information, see Compatibility.

Ważne

Począwszy od systemu Windows 10 w wersji 2004 (kompilacja 19041), printf Rodzina funkcji drukuje dokładne, reprezentacja liczb zmiennoprzecinkowych zgodnie z regułami IEEE 754 do zaokrąglania.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. W poprzednich wersjach systemu Windows, dokładnie zaprezentowane liczby zmiennoprzecinkowe kończące się znakiem "5", zawsze są zaokrąglane w górę.In previous versions of Windows, exactly representable floating point numbers ending in '5' would always round up. IEEE 754 stwierdza, że muszą zaokrąglić do najbliższej parzystej cyfry (znanej również jako "zaokrąglenie w banku").IEEE 754 states that they must round to the closest even digit (also known as "Banker's Rounding"). Na przykład obie printf("%1.0f", 1.5) i printf("%1.0f", 2.5) powinny być okrągłe do 2.For example, both printf("%1.0f", 1.5) and printf("%1.0f", 2.5) should round to 2. Wcześniej 1,5 byłyby zaokrąglane do 2 i 2,5, do 3.Previously, 1.5 would round to 2 and 2.5 would round to 3. Ta zmiana ma wpływ tylko na dokładnie zaprezentowane numery.This change only affects exactly representable numbers. Na przykład 2,35 (które, gdy reprezentowane w pamięci, jest bliżej 2.35000000000000008), w dalszym ciągu zaokrągla się do 2,4.For example, 2.35 (which, when represented in memory, is closer to 2.35000000000000008) continues to round up to 2.4. Zaokrąglanie wykonane przez te funkcje teraz uwzględnia również tryb zaokrąglania zmiennoprzecinkowego ustawiony przez fesetround .Rounding done by these functions now also respects the floating point rounding mode set by fesetround. Wcześniej funkcja zaokrąglania zawsze wybiera FE_TONEAREST zachowanie.Previously, rounding always chose FE_TONEAREST behavior. Ta zmiana dotyczy tylko programów utworzonych przy użyciu programu Visual Studio 2019 w wersji 16,2 lub nowszej.This change only affects programs built using Visual Studio 2019 version 16.2 and later. Aby użyć starszego zachowania zaokrąglania zmiennoprzecinkowego, Połącz z legacy_stdio_float_rounding.obj .To use the legacy floating point rounding behavior, link with legacy_stdio_float_rounding.obj.

PrzykładExample

// 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

Zobacz takżeSee also

Obsługa zmiennoprzecinkowaFloating-Point Support
We/Wy strumieniaStream I/O
UstawienieLocale
fopen, _wfopenfopen, _wfopen
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_lfprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l
scanf, _scanf_l, wscanf, _wscanf_lscanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_lscanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l
sprintf —, _sprintf_l, swprintf, _swprintf_l, _ _swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_lsprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l
Funkcje vprintf —vprintf Functions