_vcprintf_s
, _vcprintf_s_l
, , _vcwprintf_s
_vcwprintf_s_l
Zapíše formátovaný výstup do konzoly pomocí ukazatele na seznam argumentů. Tyto verze _vcprintf
, , _vcprintf_l
_vcwprintf_l
_vcwprintf
mají vylepšení zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
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_s(
char const* const format,
va_list argptr
);
int _vcprintf_s_l(
char const* const format,
_locale_t locale,
va_list argptr
);
int _vcwprintf_s(
wchar_t const* const format,
va_list argptr
);
int _vcwprintf_s_l(
wchar_t const* const 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.
Stejně jako méně zabezpečené verze těchto funkcí, pokud format
je ukazatel null, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Kromě toho se na rozdíl od méně zabezpečených verzí těchto funkcí vygeneruje neplatná výjimka parametru, pokud format
neurčí platný formát. Pokud provádění může pokračovat, vrátí tyto funkce kód chyby a nastaví errno
se na tento kód chyby. Výchozí kód chyby je EINVAL
v případě, že se neplatí konkrétnější hodnota.
Poznámky
Každá z těchto funkcí vezme ukazatel na seznam argumentů a potom naformátuje a zapíše daná data do konzoly. _vcwprintf_s
je širokoznační verze ._vcprintf_s
Jako argument používá ř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í.
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.
Mapování rutin obecného textu
Rutina TCHAR.H | _UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_vtcprintf_s |
_vcprintf_s |
_vcprintf_s |
_vcwprintf_s |
_vtcprintf_s_l |
_vcprintf_s_l |
_vcprintf_s_l |
_vcwprintf_s_l |
Požadavky
Rutina | Požadovaný hlavičkový soubor | Volitelná záhlaví |
---|---|---|
_vcprintf_s , _vcprintf_s_l |
<conio.h> a <stdarg.h> | <varargs.h>* |
_vcwprintf_s , _vcwprintf_s_l |
<conio.h> nebo <wchar.h> a <stdarg.h> | <varargs.h>* |
* Požadováno pro kompatibilitu se systémem UNIX V.
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_s.cpp
#include <conio.h>
#include <stdarg.h>
// An error formatting function used to print to the console.
int eprintf_s(const char* format, ...)
{
va_list args;
va_start(args, format);
int result = _vcprintf_s(format, args);
va_end(args);
return result;
}
int main()
{
eprintf_s("(%d:%d): Error %s%d : %s\n", 10, 23, "C", 2111,
"<some error text>");
eprintf_s(" (Related to symbol '%s' defined on line %d).\n",
"<symbol>", 5 );
}
(10,23): Error C2111 : <some error text>
(Related to symbol '<symbol>' defined on line 5).
Viz také
Vstupně-výstupní operace streamu
vprintf
– funkce
_cprintf
, _cprintf_l
, , _cwprintf
_cwprintf_l
fprintf
, _fprintf_l
, , fwprintf
_fwprintf_l
printf
, _printf_l
, , wprintf
_wprintf_l
sprintf
, _sprintf_l
, swprintf
, , _swprintf_l
__swprintf_l
va_arg
, va_copy
, , va_end
va_start