vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
Psát formátovaný výstup pomocí ukazatele na seznam argumentů.Bezpečnější verze tyto funkce jsou k dispozici; see vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.
int vsprintf(
char *buffer,
const char *format,
va_list argptr
);
int _vsprintf_l(
char *buffer,
const char *format,
locale_t locale,
va_list argptr
);
int vswprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format,
va_list argptr
);
int _vswprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
);
int __vswprintf_l(
wchar_t *buffer,
const wchar_t *format,
locale_t locale,
va_list argptr
);
template <size_t size>
int vsprintf(
char (&buffer)[size],
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsprintf_l(
char (&buffer)[size],
const char *format,
locale_t locale,
va_list argptr
); // C++ only
template <size_t size>
int vswprintf(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vswprintf_l(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
); // C++ only
Parametry
buffer
Umístění úložiště pro výstup.count
Maximální počet znaků v ukládat UNICODE verze této funkce.format
Specifikace formátu.argptr
Ukazatel na seznam argumentů.locale
Národní prostředí použít.
Vrácená hodnota
vsprintfa vswprintf vrácení počtu znaků písemné, není včetně ukončujícím znakem null nebo zápornou hodnotu, pokud dojde k chybě výstup.Pokud buffer nebo format je nulový ukazatel tyto funkce vyvolat popisovač neplatný parametr, jak je popsáno v Ověření parametrů.Pokud je povoleno spuštění pokračovat, vrátí tyto funkce hodnotu -1 a errno na EINVAL.
Informace o těchto a jiných kódů chyb naleznete v tématu _doserrno, kód chyby, _sys_errlist a _sys_nerr.
Poznámky
Každá z těchto funkcí má ukazatel na seznam argumentů a pak formáty a zapíše do paměti odkazuje dané datové buffer.
Verze těchto funkcí se _l přípony jsou shodné s výjimkou, že používají národní prostředí parametr předaný namísto aktuální podproces národní prostředí.
Poznámka k zabezpečení |
---|
Pomocí vsprintf, zde je způsob, jak omezit počet znaků zapsán, což znamená, že kód pomocí této funkce je náchylná k přetečení.Použití _vsnprintf , nebo volejte _vscprintf zjistit, jak velké vyrovnávací paměti je nutný.Také zajistit, aby format není uživatelem definovaný řetězec.Další informace naleznete v tématu Vyhnout způsobí přetečení vyrovnávací paměti. |
vswprintfvyhovuje standardu C ISO, které vyžaduje druhý parametr, count, typu size_t.Chcete-li vynutit staré nestandardní chování definovat _CRT_NON_CONFORMING_SWPRINTFS. staré chování nemusí být v budoucí verzi, takže by měl být změněn kód použít toto nové chování splňovala podmínky shody.
V jazyce C++ mají tyto funkce šablony přetížení, které vyvolávají novější, zabezpečené protějšků těchto funkcí.Další informace naleznete v tématu Přetížení šablony zabezpečení.
Obecný Text rutinní mapování
TCHAR.Rutina H |
_UNICODE & _MBCS není definován |
_MBCS, definice |
_UNICODE, definice |
---|---|---|---|
_vstprintf |
vsprintf |
vsprintf |
vswprintf |
_vstprintf_l |
_vsprintf_l |
_vsprintf_l |
_vswprintf_l |
Požadavky
Rutina |
Požadované záhlaví |
Volitelné záhlaví |
---|---|---|
vsprintf, _vsprintf_l |
<stdio.h> a <stdarg.h> |
<varargs.h> * |
vswprintf, _vswprintf_l |
<stdio.h> nebo <wchar.h> a <stdarg.h> |
<varargs.h> * |
* Vyžaduje kompatibilitu v systému UNIX.
Další informace o kompatibilitě, viz Compatibility v úvodu.
Příklad
// crt_vsprintf.c
// compile with: /W3
// This program uses vsprintf 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 * format, ... )
{
va_list args;
int len;
char *buffer;
// retrieve the variable arguments
va_start( args, format );
len = _vscprintf( format, args ) // _vscprintf doesn't count
+ 1; // terminating '\0'
buffer = (char*)malloc( len * sizeof(char) );
vsprintf( buffer, format, args ); // C4996
// Note: vsprintf is deprecated; consider using vsprintf_s instead
puts( buffer );
free( buffer );
}
int main( void )
{
test( "%d %c %d", 123, '<', 456 );
test( "%s", "This is a string" );
}
Ekvivalent v rozhraní .NET Framework
Viz také
Referenční dokumentace
Syntaxe specifikace formátu: funkce printf a wprintf
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l