_vcprintf_p
, _vcprintf_p_l
, , _vcwprintf_p
_vcwprintf_p_l
Zapisuje formátovaný výstup do konzoly pomocí ukazatele na seznam argumentů a podporuje poziční parametry v řetězci formátu.
Důležité
Toto rozhraní API nelze použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.
Syntaxe
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
Specifikace formátu.
argptr
Ukazatel na seznam argumentů
locale
Národní prostředí, které se má použít
Další informace naleznete v tématu Syntaxe specifikace formátu: printf
a wprintf
funkce.
Vrácená hodnota
Počet zapsaných znaků nebo záporná hodnota, pokud dojde k chybě výstupu. Pokud format
je ukazatel null, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, errno
je nastavena na EINVAL
hodnotu a vrátí hodnotu -1.
Poznámky
Každá z těchto funkcí vezme ukazatel na seznam argumentů a pak pomocí _putch
funkce naformátuje a zapíše daná data do konzoly. (_vcwprintf_p
používá se _putwch
místo _putch
. _vcwprintf_p
je širokoznační verze _vcprintf_p
. Jako argument trvá řetězec širokého znaku.)
Verze těchto funkcí, které mají příponu _l
, jsou shodné s tím rozdílem, že používají parametr národního prostředí předaný místo aktuálního národního prostředí.
Každý argument
(pokud existuje) je převeden a je výstup podle odpovídající specifikace formátu v format
. Specifikace formátu podporuje poziční parametry, abyste mohli určit pořadí, ve kterém jsou argumenty použity ve formátovacím řetězci. Další informace najdete v tématu printf_p poziční parametry.
Tyto funkce nepřekládají znaky odřádkování na výstupu do kombinací návratového řádku řádku (CR-LF).
Důležité
Ujistěte se, že format
není uživatelem definovaný řetězec. Další informace najdete v tématu Zabránění přetečení vyrovnávací paměti.
Tyto funkce ověřují vstupní ukazatel a formátovací řetězec. Pokud format
nebo je NULL
, nebo argument
pokud formátovací řetězec obsahuje neplatné znaky formátování, tyto funkce vyvolat neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je povolené provádění pokračovat, vrátí tyto funkce hodnotu -1 a nastaví errno
se na EINVAL
hodnotu .
Mapování rutin obecného textu
Rutina Tchar.h | _UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_vtcprintf_p |
_vcprintf_p |
_vcprintf_p |
_vcwprintf_p |
_vtcprintf_p_l |
_vcprintf_p_l |
_vcprintf_p_l |
_vcwprintf_p_l |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_vcprintf_p , _vcprintf_p_l |
<conio.h> a <stdarg.h> |
_vcwprintf_p , _vcwprintf_p_l |
<conio.h> a <stdarg.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Důležité
Počínaje Windows 10 verze 2004 (build 19041) printf
vytiskne řada funkcí přesně reprezentovatelná čísla s plovoucí desetinnou čárkou podle pravidel IEEE 754 pro zaokrouhlování. V předchozích verzích Windows by se vždy zaokrouhlila přesně reprezentovatelná čísla s plovoucí desetinnou čárkou končící na 5. IEEE 754 uvádí, že musí zaokrouhlit na nejbližší sudou číslici (označované také jako "Zaokrouhlování bankera"). Například obě printf("%1.0f", 1.5)
a printf("%1.0f", 2.5)
měly by se zaokrouhlit na 2. Dříve by se 1,5 zaokrouhlo na 2 a 2,5 by se zaokrouhlilo na 3. Tato změna má vliv jenom na přesně reprezentovatelná čísla. Například hodnota 2,35 (která je při znázornění v paměti blíže 2,350000000000008) pokračuje zaokrouhlit nahoru na 2,4. Zaokrouhlování provedené těmito funkcemi nyní respektuje také režim zaokrouhlování s plovoucí desetinou čárkou nastavený .fesetround
Dříve bylo zaokrouhlení vždy zvoleno FE_TONEAREST
chování. Tato změna má vliv jenom na programy vytvořené pomocí sady Visual Studio 2019 verze 16.2 a novější. Chcete-li použít starší chování zaokrouhlování s plovoucí desetinou čárkou, propojte s legacy_stdio_float_rounding.obj
.
Příklad
// 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
Viz také
Vstupně-výstupní operace konzoly a portu
_cprintf
, _cprintf_l
, , _cwprintf
_cwprintf_l
va_arg
, va_copy
, , va_end
va_start
printf_p – poziční parametry