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_l
vswprintf
_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 EINVAL
hodnotu .
Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
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 buffer
odkazuje .
vswprintf_s
odpovídá normě ISO C, která vswprintf
vyžaduje druhý parametr , count
typu 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_end
va_start