Sdílet prostřednictvím


vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l

Psát formátovaný výstup pomocí ukazatele na seznam argumentů.Tyto verze jsou vsnprintf, _vsnprintf, _vsnprintf_l, _vsnwprintf, _vsnwprintf_l s vylepšení zabezpečení popsaným v Funkce zabezpečení v CRT.

int vsnprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   locale_t locale,
   va_list argptr 
);
int _vsnwprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const wchar_t *format,
   va_list argptr 
);
int _vsnwprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);
template <size_t size>
int _vsnprintf_s(
   char (&buffer)[size],
   size_t count,
   const char *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsnwprintf_s(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   va_list argptr 
); // C++ only

Parametry

  • buffer
    Umístění úložiště pro výstup.

  • sizeOfBuffer
    Velikost buffer pro výstup v bajtech.

  • count
    Maximální počet znaků pro zápis (včetně není ukončující null), nebo _TRUNCATE.

  • format
    Specifikace formátu.

  • argptr
    Ukazatel na seznam argumentů.

  • locale
    Národní prostředí použít.

Další informace naleznete v tématu Specifikace formátu.

Vrácená hodnota

vsnprintf_s,_vsnprintf_s a _vsnwprintf_s vrácení počtu znaků písemné, není včetně ukončující null nebo zápornou hodnotu, pokud dojde k chybě výstup.vsnprintf_sje shodné s _vsnprintf_s.vsnprintf_sje součástí dodržování standardu ANSI._vnsprintfje zachována z důvodu zpětné kompatibility.

Pokud překročí úložiště pro ukládání dat a ukončující null sizeOfBuffer, vyvolat neplatný parametr popisovače, jak je popsáno v Ověření parametrů, pokud count je _TRUNCATE, v tom případě největší řetězec jako vejde buffer je zapsán a vrátí -1.Pokud provádění pokračuje i po zpracování neplatný parametr, nastavte tyto funkce buffer nastavit na prázdný řetězec, errno na ERANGEa vrátí -1.

Pokud buffer nebo format je NULL ukazatele, nebo pokud count je menší nebo rovna nule, je vyvolána parametr neplatný popisovač.Pokud je povoleno spuštění pokračovat, nastavit tyto funkce errno na EINVAL a vrátí -1.

Chybové podmínky

Condition

Vrátit

errno

bufferje NULL

-1

EINVAL

formatje NULL

-1

EINVAL

count< = 0

-1

EINVAL

sizeOfBuffertoo small (and count != _TRUNCATE)

-1 (a buffer na prázdný řetězec)

ERANGE

Poznámky

Každá z těchto funkcí má ukazatel na seznam argumentů, pak formáty a zapíše do count znaky daného data do paměti odkazuje buffer a připojí ukončující null.

Pokud count je _TRUNCATE, pak tyto funkce zápisu největší řetězec vejde buffer a nechat prostor pro ukončující null.Pokud vešel celý řetězec (s ukončující null) buffer, pak vrátí tyto funkce počet znaků, které jsou napsány (nikoli včetně ukončující null); jinak vrátí tyto funkce -1 označuje, že toto zkrácení došlo k chybě.

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íPoznámka k zabezpečení

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.

[!POZNÁMKA]

Chcete-li zajistit, že je prostor pro ukončující null, ujistěte se, zda count je přísně menší než délka vyrovnávací paměti nebo použití _TRUNCATE.

V jazyce C++ použití těchto funkcí je zjednodušeno díky šablony přetížení; přetížení automaticky odvodit vyrovnávací paměti (není tak nutné zadat argument velikost) a jsou automaticky nahradit starší, -secure funkce s jejich protějšky novější, zabezpečené.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

_vsntprintf_s

_vsnprintf_s

_vsnprintf_s

_vsnwprintf_s

_vsntprintf_s_l

_vsnprintf_s_l

_vsnprintf_s_l

_vsnwprintf_s_l

Ekvivalent v rozhraní .NET Framework

Nelze použít Použijte volání funkce standardní C, PInvoke. Další informace naleznete v tématu Příklady vyvolat platformu.

Požadavky

Rutina

Požadované záhlaví

Volitelné záhlaví

vsnprintf_s

<stdio.h> a <stdarg.h>

<varargs.h> *

_vsnprintf_s, _vsnprintf_s_l

<stdio.h> a <stdarg.h>

<varargs.h> *

_vsnwprintf_s, _vsnwprintf_s_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_vsnprintf_s.cpp
#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_s( buff, sizeof(buff), _TRUNCATE, formatstring, args);
   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!!");
}
  
  

Viz také

Referenční dokumentace

Proud I/O

Funkce vprintf

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

va_arg, va_end, va_start