sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
Zapište formátovaná data do řetězce.Bezpečnější verze některých z těchto funkcí jsou k dispozici; viz sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l.Zabezpečené verze swprintf a _swprintf_l nepřejímají parametr count.
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int _sprintf_l(
char *buffer,
const char *format,
locale_t locale [,
argument] ...
);
int swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);
int _swprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
locale_t locale [,
argument] ...
);
int __swprintf_l(
wchar_t *buffer,
const wchar_t *format,
locale_t locale [,
argument] ...
);
template <size_t size>
int sprintf(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
char (&buffer)[size],
const char *format,
locale_t locale [,
argument] ...
); // C++ only
template <size_t size>
int swprintf(
wchar_t (&buffer)[size],
const wchar_t *format [,
argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
wchar_t (&buffer)[size],
const wchar_t *format,
locale_t locale [,
argument] ...
); // C++ only
Parametry
buffer
Umístění úložiště pro výstupcount
Maximální počet znaků, které lze uložit ve verzi kódování Unicode této funkce.format
Řetězec řízení formátuargument
Volitelné argumentylocale
Použité národní prostředí.
Další informace naleznete v tématu Specifikace formátu.
Vrácená hodnota
Počet znaků zapsaných nebo –1, pokud došlo k chybě.Pokud buffer nebo format je ukazatel s hodnotou null, je vyvolán neplatný parametr obslužné rutiny, 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.
sprintf vrátí počet bajtů, které jsou uloženy v buffer mimo ukončující znaky null.swprintfvrátí počet širokých znaků, které jsou uloženy v rámci buffer. Do výčtu nebudou zapojeny ukončující široké znaky null.
Poznámky
Funkce sprintf formátuje a ukládá řadu znaků a hodnot v buffer.Každý argument (pokud existuje) je převeden podle odpovídající specifikace formátu v format.Formát se skládá z běžných znaků a má stejnou formu a funkci, jako argument format pro printf.Za poslední zadaný znak je připojen znak null.Pokud ke kopírování dojde mezi řetězci, které se překrývají, chování není definováno.
Poznámka k zabezpečení |
---|
Při použití sprintf neexistuje žádný způsob, jak omezit počet napsaných znaků, což znamená, že kód pomocí sprintf je náchylný k přetečení zásobníku.Zvažte použití související funkce _snprintf, která určuje maximální počet znaků, které mají být zapsány do buffer, nebo pomocí funkce _scprintf určete nezbytnou velikost vyrovnávací paměti.Také se ujistěte, že format není uživatelem definovaný řetězec. |
swprintf je širokoznaká verze sprintf. Argumenty ukazatele pro swprintf jsou širokoznaké řetězce.Detekce chyb kódování v swprintf se může lišit od detekce v sprintf.swprintf a fwprintf se chovají stejně, s výjimkou, že swprintf zapíše výstup do řetězce, nikoli do cílového umístění typu FILE, a swprintf vyžaduje parametr count, aby mohl určit maximální počet znaků, které mají být zaznamenány.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.
swprintf odpovídá standardu ISO C, který vyžaduje druhý parametr count typu size_t.Pro vynucení starého nestandardního chování definujte _CRT_NON_CONFORMING_SWPRINTFS.V budoucí verzi může být odstraněno staré chování, takže by měl být kód změněn, aby používal toto nové chování, které je v souladu s normou.
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 |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Požadavky
Rutina |
Požadované záhlaví |
---|---|
sprintf, _sprintf_l |
<stdio.h> |
swprintf, _swprintf_l |
<stdio.h> nebo <wchar.h> |
Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.
Příklad
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf 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( buffer, " String: %s\n", s ); // C4996
j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
// Note: sprintf is deprecated; consider using sprintf_s instead
printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
Ekvivalent v rozhraní .NET Framework
Viz také
Referenční dokumentace
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l