Sdílet prostřednictvím


vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l, , _vstprintf_s_vstprintf_s_l

Zapíše formátovaný výstup pomocí ukazatele na seznam argumentů. Tyto funkce jsou verze vsprintf, , _vsprintf_lvswprintf_vswprintf_l"__vswprintf_l" s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.

A _vstprintf_s viz mapování obecných textových funkcí._vstprintf_s_l

Syntaxe

int vsprintf_s(
   char *buffer,
   size_t numberOfElements,
   const char *format,
   va_list argptr
);
int _vsprintf_s_l(
   char *buffer,
   size_t numberOfElements,
   const char *format,
   _locale_t locale,
   va_list argptr
);
int vswprintf_s(
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *format,
   va_list argptr
);
int _vswprintf_s_l(
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *format,
   _locale_t locale,
   va_list argptr
);
template <size_t size>
int vsprintf_s(
   char (&buffer)[size],
   const char *format,
   va_list argptr
); // C++ only
template <size_t size>
int vswprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   va_list argptr
); // C++ only

Parametry

buffer
Umístění úložiště pro výstup.

numberOfElements
buffer Velikost znaků

format
Specifikace formátu

argptr
Ukazatel na seznam argumentů

locale
Národní prostředí, které se má použít

Vrácená hodnota

vsprintf_s a vswprintf_s vrátí počet zapsaných znaků, které neobsahují ukončující znak null nebo zápornou hodnotu, pokud dojde k výstupní chybě. Pokud buffer je nebo format je ukazatel null, pokud numberOfElements je nula nebo pokud formátovací řetězec obsahuje neplatné znaky formátování, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je možné pokračovat spuštěním, funkce vrátí hodnotu -1 a nastaví errno se na EINVALhodnotu .

Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Poznámky

Každá z těchto funkcí vezme ukazatel na seznam argumentů a pak formátuje a zapíše daná data do paměti, na kterou bufferodkazuje .

vswprintf_s odpovídá normě ISO C, která vswprintfvyžaduje druhý parametr , counttypu size_t.

Tyto funkce se liší od nezabezpečených verzí pouze v tom, že zabezpečené verze podporují poziční parametry. Další informace naleznete v tématu printf_p Poziční parametry.

Verze těchto funkcí s příponou _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í vlákna.

V jazyce C++ je použití těchto funkcí zjednodušené přetížením šablony. Přetížení mohou odvodit délku vyrovnávací paměti automaticky, čímž eliminuje potřebu zadat argument velikosti. A mohou automaticky nahradit nezabezpečené funkce svými zabezpečenými protějšky. Další informace naleznete v tématu Přetížení šablon zabezpečení.

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ší. Pokud chcete použít starší chování zaokrouhlení s plovoucí desetinou čárkou, použijte odkaz na legacy_stdio_float_rounding.obj.

Mapování obecných textových funkcí

Funkce ve sloupci tchar.h se mapuje na funkci v ostatních sloupcích v závislosti na znakové sadě, která je definována v době kompilace.

Funkce tchar.h _UNICODE a _MBCS není definován _MBCS definovaný _UNICODE definovaný
_vstprintf_s vsprintf_s vsprintf_s vswprintf_s
_vstprintf_s_l _vsprintf_s_l _vsprintf_s_l _vswprintf_s_l

Požadavky

Rutina Požadovaný hlavičkový soubor Volitelná záhlaví
vsprintf_s, _vsprintf_s_l <stdio.h> a <stdarg.h> <varargs.h>*
vswprintf_s, _vswprintf_s_l <stdio.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.

Příklad

// crt_vsprintf_s.c
// Compile with: cl /W4 crt_vsprintf_s.c
// This program uses vsprintf_s to write to a buffer.
// The size of the buffer is determined by _vscprintf.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

void test( char const * const format, ... )
{
   va_list args;
   int len;
   char * buffer;

   va_start( args, format );
   len = _vscprintf( format, args ) // _vscprintf doesn't count
                               + 1; // terminating '\0'
   buffer = (char *) malloc( len * sizeof(char) );
   if ( NULL != buffer )
   {
      vsprintf_s( buffer, len, format, args );
      puts( buffer );
      free( buffer );
   }
   va_end( args );
}

int main( void )
{
   test( "%d %c %d", 123, '<', 456 );
   test( "%s", "This is a string" );
}
123 < 456
This is a string

Viz také

Vstupně-výstupní operace streamu
vprintf – funkce
Syntaxe specifikace formátu: printf a wprintf funkce
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_endva_start