_vcprintf_p
, _vcprintf_p_l
, _vcwprintf_p
, _vcwprintf_p_l
Zapisuje sformatowane dane wyjściowe w konsoli przy użyciu wskaźnika do listy argumentów i obsługuje parametry pozycyjne w ciągu formatu.
Ważne
Tego interfejsu API nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.
Składnia
int _vcprintf_p(
const char* format,
va_list argptr
);
int _vcprintf_p_l(
const char* format,
_locale_t locale,
va_list argptr
);
int _vcwprintf_p(
const wchar_t* format,
va_list argptr
);
int _vcwprintf_p_l(
const wchar_t* format,
_locale_t locale,
va_list argptr
);
Parametry
format
Specyfikacja formatu.
argptr
Wskaźnik do listy argumentów.
locale
Ustawienia regionalne do użycia.
Aby uzyskać więcej informacji, zobacz Składnia specyfikacji formatu: printf
i wprintf
funkcje.
Wartość zwracana
Liczba zapisanych znaków lub wartość ujemna, jeśli wystąpi błąd wyjściowy. Jeśli format
jest wskaźnikiem o wartości null, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonywanie jest dozwolone do kontynuowania, errno
jest ustawione na EINVAL
, a -1 jest zwracany.
Uwagi
Każda z tych funkcji przyjmuje wskaźnik do listy argumentów, a następnie używa _putch
funkcji do formatowania i zapisywania danych w konsoli. (_vcwprintf_p
używa _putwch
zamiast _putch
. _vcwprintf_p
jest wersją o szerokim znaku . _vcprintf_p
Przyjmuje on ciąg o szerokim znaku jako argument).
Wersje tych funkcji, które mają _l
sufiks, są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych zamiast bieżących ustawień regionalnych.
Każda argument
(jeśli istnieje) jest konwertowana i jest wynikiem wyjściowym zgodnie z odpowiednią specyfikacją formatu w pliku format
. Specyfikacja formatu obsługuje parametry pozycyjne, dzięki czemu można określić kolejność, w jakiej argumenty są używane w ciągu formatu. Aby uzyskać więcej informacji, zobacz printf_p Parametry pozycyjne.
Te funkcje nie tłumaczą znaków kanału informacyjnego wiersza na danych wyjściowych do kombinacji zestawienia powrotnego karetki (CR-LF).
Ważne
Upewnij się, że format
nie jest to ciąg zdefiniowany przez użytkownika. Aby uzyskać więcej informacji, zobacz Unikanie przekroków buforu.
Te funkcje weryfikują wskaźnik wejściowy i ciąg formatu. Jeśli format
ciąg formatu lub argument
NULL
zawiera nieprawidłowe znaki formatowania, te funkcje wywołują nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie może kontynuować, te funkcje zwracają wartość -1 i ustawiają wartość errno
EINVAL
.
Mapowania procedur tekstu ogólnego
Procedura tchar.h | _UNICODE i _MBCS niezdefiniowane |
_MBCS Zdefiniowane |
_UNICODE Zdefiniowane |
---|---|---|---|
_vtcprintf_p |
_vcprintf_p |
_vcprintf_p |
_vcwprintf_p |
_vtcprintf_p_l |
_vcprintf_p_l |
_vcprintf_p_l |
_vcwprintf_p_l |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
_vcprintf_p , _vcprintf_p_l |
<conio.h> i <stdarg.h> |
_vcwprintf_p , _vcwprintf_p_l |
<conio.h> i <stdarg.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Ważne
Począwszy od systemu Windows 10 w wersji 2004 (kompilacja 19041), printf
rodzina funkcji drukuje dokładnie możliwe liczby zmiennoprzecinkowe zgodnie z regułami IEEE 754 dotyczącymi zaokrąglania. W poprzednich wersjach systemu Windows dokładnie reprezentowane liczby zmiennoprzecinkowe kończące się na "5" zawsze zaokrągla się w górę. IEEE 754 stwierdza, że muszą zaokrąglić do najbliższej parzysta cyfra (znana również jako "Zaokrąglanie Bankiera"). Na przykład oba printf("%1.0f", 1.5)
printf("%1.0f", 2.5)
elementy i powinny być zaokrąglone do 2. Wcześniej 1,5 zaokrągliłoby się do 2 i 2,5 do 3. Ta zmiana dotyczy tylko dokładnie możliwych do reprezentowania liczb. Na przykład 2,35 (który, gdy jest reprezentowany w pamięci, jest bliżej 2,350000000000000008) nadal zaokrągla się do 2,4. Zaokrąglanie wykonywane przez te funkcje jest teraz również zgodne z trybem zaokrąglania zmiennoprzecinkowego ustawionym przez fesetround
. Wcześniej zaokrąglanie zawsze wybierało FE_TONEAREST
zachowanie. Ta zmiana dotyczy tylko programów utworzonych przy użyciu programu Visual Studio 2019 w wersji 16.2 lub nowszej. Aby użyć starszego zachowania zaokrąglania zmiennoprzecinkowego, połącz się z elementem legacy_stdio_float_rounding.obj
.
Przykład
// crt_vcprintf_p.c
// compile with: /c
#include <conio.h>
#include <stdarg.h>
// An error formatting function that's used to print to the console.
int eprintf(const char* format, ...)
{
va_list args;
va_start(args, format);
int result = _vcprintf_p(format, args);
va_end(args);
return result;
}
int main()
{
int n = eprintf("parameter 2 = %2$d; parameter 1 = %1$s\r\n",
"one", 222);
_cprintf_s("%d characters printed\r\n");
}
parameter 2 = 222; parameter 1 = one
38 characters printed
Zobacz też
We/Wy konsoli i portu
_cprintf
, _cprintf_l
, _cwprintf
, _cwprintf_l
va_arg
, va_copy
, va_end
, va_start
printf_p Parametry pozycyjne
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla