Udostępnij przez


_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 argumentNULLzawiera 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ść errnoEINVAL.

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