vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
Zápis formátovaného výstupu pomocí ukazatele na seznamu argumentů.Bezpečnější verze těchto funkcí jsou k dispozici; viz 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],
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vswprintf_l(
wchar_t (&buffer)[size],
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ů, které chcete ukládat v UNICODE verze této funkce.format
Specifikace formátu.argptr
Ukazatel na seznam argumentů.locale
Použité národní prostředí.
Vrácená hodnota
vsprintfa vswprintf vrátí počet napsaných znaků, bez ukončujícího znaku null, nebo zápornou hodnotu, dojde-li k chybě výstupu.Pokud buffer nebo format je nulový ukazatel, tyto funkce vyvolat obslužnou rutinu neplatný parametr, jak je popsáno v Ověření parametru.Pokud provádění může pokračovat, vrátí funkce hodnotu -1 a nastaví errno na EINVAL.
Informace o těchto a dalších chybových kódech naleznete v části _doserrno, errno, _sys_errlist, and _sys_nerr.
Poznámky
Každá z těchto funkcí má ukazatel na seznam argumentů a potom formátuje a poskytnutá data zapíše do paměti, na kterou odkazuje buffer.
Verze těchto funkcí s příponou _l jsou stejné s tím rozdílem, že používají parametr předané národní prostředí namísto aktuálního národní prostředí pro vlákno.
Poznámka k zabezpečení |
---|
Pomocí vsprintf, zde je způsob, jak omezit počet znaků zapsána, což znamená, že kód pomocí této funkce je náchylná k přetečení zásobníku.Použití _vsnprintf , nebo volejte _vscprintf Chcete-li zjistit, jak velké vyrovnávací paměti je potřeba.Také se ujistěte, že format není uživatelem definovaný řetězec.Další informace naleznete v tématu Předcházení přetečení vyrovnávací paměti. |
vswprintf odpovídá standardu ISO C, který vyžaduje druhý parametr count typu size_t.Definovat přinutit staré nestandardní chování _CRT_NON_CONFORMING_SWPRINTFS. staré chování nemusí být v budoucí verzi, tak 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 přetížení šablon, která vyvolávají novější, zabezpečené protějšky těchto funkcí.Další informace naleznete v tématu Přetížení zabezpečení šablony.
Rutinní mapování obecného textu
Rutina TCHAR.H |
_UNICODE & _MBCS není definováno |
_MBCS definováno |
_UNICODE definováno |
---|---|---|---|
_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>* |
* Potřebné k zajištění kompatibility systému UNIX V.
Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.
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