Sdílet prostřednictvím


sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

Zapisovat data formátovaný řetězec.Tyto verze jsou sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l s vylepšení zabezpečení popsaným v Funkce zabezpečení v CRT.

int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
   argument] ... 
);
int _sprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format [,
   argument]...
);
int _swprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   locale_t locale [,
   argument]…
);
template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format [,
   argument]...
); // C++ only

Parametry

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

  • sizeOfBuffer
    Maximální počet znaků, které chcete uložit.

  • format
    Řetězec formátu řízení

  • argument
    Volitelné argumenty

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

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

Vrácená hodnota

Počet znaků, které jsou zapsány nebo –1, pokud došlo k chybě.If buffer or format is a null pointer, sprintf_s and swprintf_s return -1 and set errno to EINVAL.

sprintf_sVrátí počet bajtů, které jsou uloženy v buffer, se nepočítají ukončujícím znakem null.swprintf_sVrátí počet široké znaků, které jsou uloženy v buffer, se nepočítají ukončující širokým znakem null.

Poznámky

sprintf_s Funkce formáty a ukládá řadu znaků a hodnot v buffer.Každý argument (pokud existuje) převedena a výstup podle odpovídající specifikaci formátu v format.Formát se skládá z běžných znaků a má stejný formulář a fungovat jako format argument pro printf.Po poslední znak zapsán připojen znakem null.Kopírování dojde-li mezi řetězce, které se překrývají, chování není definována.

Jeden hlavní rozdíl mezi sprintf_s a sprintf je sprintf_s kontroluje řetězec formátu pro platné znaky pro formátování, že sprintf pouze zkontroluje, zda formát řetězce nebo vyrovnávací paměti jsou NULL ukazatelů.Buď políčko selže, pokud je vyvoláno neplatný parametr popisovače, jak je popsáno v Ověření parametrů.Pokud je povoleno spuštění pokračovat, vrátí funkce hodnotu -1 a sady errno na EINVAL.

Další hlavní rozdíl mezi sprintf_s a sprintf je sprintf_s přebírá parametr délka znaků určující velikost výstupní vyrovnávací paměti.Pokud vyrovnávací paměť je příliš malá pro text tištěn vyrovnávací paměti je nastavena na prázdný řetězec a je vyvolána parametr neplatný popisovač.Na rozdíl od snprintf, sprintf_s zaručuje, že vyrovnávací paměť bude null ukončen (Pokud velikost vyrovnávací paměti není nula).

swprintf_sje verze celého znaku sprintf_s; ukazatel argumenty swprintf_s jsou celý znak řetězce.Zjišťování chyb v kódování swprintf_s se mohou lišit v sprintf_s.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í.

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

Existují verze sprintf_s , nabízejí další řízení co se stane, pokud vyrovnávací paměť je příliš malá.Další informace naleznete v tématu _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

Obecný Text rutinní mapování

TCHAR.Rutina H

_UNICODE & _MBCS není definován

_MBCS, definice

_UNICODE, definice

_stprintf_s

sprintf_s

sprintf_s

swprintf_s

_stprintf_s_l

_sprintf_s_l

_sprintf_s_l

_swprintf_s_l

Požadavky

Rutina

Požadované záhlaví

sprintf_s, _sprintf_s_l

<stdio.h>

swprintf_s, _swprintf_s_l

<stdio.h> nebo <wchar.h>

Další informace o kompatibilitě, viz Compatibility v úvodu.

Příklad

// crt_sprintf_s.c
// This program uses sprintf_s to format various
// data and place them in the string named buffer.
//

#include <stdio.h>

int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;

   // Format and print various data: 
   j  = sprintf_s( buffer, 200,     "   String:    %s\n", s );
   j += sprintf_s( buffer + j, 200 - j, "   Character: %c\n", c );
   j += sprintf_s( buffer + j, 200 - j, "   Integer:   %d\n", i );
   j += sprintf_s( buffer + j, 200 - j, "   Real:      %f\n", fp );

   printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
  
// crt_swprintf_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf_s fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
  

Ekvivalent v rozhraní .NET Framework

[M:System::String::Format]

Viz také

Referenční dokumentace

Proud I/O

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

Funkce vprintf