vsnprintf, _vsnprintf, _vsnprintf_l, _vsnwprintf, _vsnwprintf_l
Zapíše formátovaný výstup pomocí ukazatele na seznam argumentů.Bezpečnější verze těchto funkcí jsou k dispozici; viz vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l.
int vsnprintf(
char *buffer,
size_t count,
const char *format,
va_list argptr
);
int _vsnprintf(
char *buffer,
size_t count,
const char *format,
va_list argptr
);
int _vsnprintf_l(
char *buffer,
size_t count,
const char *format,
locale_t locale,
va_list argptr
);
int _vsnwprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format,
va_list argptr
);
int _vsnwprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
);
template <size_t size>
int vsnprintf(
char (&buffer)[size],
size_t count,
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsnprintf(
char (&buffer)[size],
size_t count,
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsnprintf_l(
char (&buffer)[size],
size_t count,
const char *format,
locale_t locale,
va_list argptr
); // C++ only
template <size_t size>
int _vsnwprintf(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsnwprintf_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ů, které chcete psát.format
Specifikace formátu.argptr
Ukazatel na seznam argumentů.locale
Použité národní prostředí.
Další informace naleznete v tématu Specifikace formátu.
Vrácená hodnota
vsnprintf, _vsnprintf, a _vsnwprintf vrácení počtu znaků, které jsou napsány Pokud počet znaků pro zápis je menší než nebo rovno count; Pokud je větší než počet znaků napsat count, tyto funkce vrácení -1 označuje, že výstup byl zkrácen.Vrácená hodnota nezahrnuje ukončující null, pokud jeden je napsán.
Pokud buffer nebo format je NULL, nebo pokud count je menší nebo rovna nule, 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.
Poznámky
Každá z těchto funkcí má ukazatel na seznam argumentů, potom formátuje data a zapíše do count znaky do paměti odkazuje buffer.Pokud je na konci místnosti (tj. Pokud je počet znaků, které chcete zapsat menší než count), vyrovnávací paměť bude zakončený hodnotou null.
Poznámka k zabezpečení |
---|
Zajistěte, aby format nebyl uživatelem definovaný řetězec.Další informace naleznete v tématu Předcházení přetečení vyrovnávací paměti. |
[!POZNÁMKA]
Aby bylo místo pro ukončující null, ujistěte se, že count je přísně menší než velikost vyrovnávací paměti a inicializovat vyrovnávací paměť na hodnotu null před voláním funkce.
Funkce vsnprintf je shodná s funkcí _vsnprintf.vsnprintfpro kompatibilitu ANSI standardní; _vnsprintf je zachována z důvodu zpětné kompatibility.
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.
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 |
---|---|---|---|
_vsntprintf |
_vsnprintf |
_vsnprintf |
_vsnwprintf |
_vsntprintf_l |
_vsnprintf_l |
_vsnprintf_l |
_vsnwprintf_l |
Požadavky
Rutina |
Požadované záhlaví |
Volitelná záhlaví |
---|---|---|
vsnprintf |
<stdio.h> a <stdarg.h> |
<varargs.h>* |
_vsnprintf, _vsnprintf_l |
<stdio.h> a <stdarg.h> |
<varargs.h>* |
_vsnwprintf, _vsnwprintf_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_vsnprintf.cpp
// compile with: /W3
#include <stdio.h>
#include <wtypes.h>
void FormatOutput(LPCSTR formatstring, ...)
{
int nSize = 0;
char buff[10];
memset(buff, 0, sizeof(buff));
va_list args;
va_start(args, formatstring);
nSize = vsnprintf( buff, sizeof(buff) - 1, formatstring, args); // C4996
// Note: vsnprintf is deprecated; consider vsnprintf_s instead
printf("nSize: %d, buff: %s\n", nSize, buff);
}
int main() {
FormatOutput("%s %s", "Hi", "there");
FormatOutput("%s %s", "Hi", "there!");
FormatOutput("%s %s", "Hi", "there!!");
}
Ekvivalent v rozhraní .NET Framework
Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.
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