Sdílet prostřednictvím


_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_vcwprintfmají 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_sje š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 Definovány _UNICODE Definovány
_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 systém 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