Sdílet prostřednictvím


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í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

I/O proudu

vprintf – funkce

Syntaxe specifikace formátu: funkce printf a wprintf

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