sprintf
, _sprintf_l
, swprintf
, _swprintf
, , _swprintf_l
__swprintf_l
Zapište formátovaná data do řetězce. K dispozici jsou bezpečnější verze některých z těchto funkcí; viz sprintf_s
, _sprintf_s_l
, swprintf_s
, _swprintf_s_l
. Zabezpečené verze swprintf
vyrovnávací paměti a _swprintf_l
berou jako parametr velikost vyrovnávací paměti.
Syntaxe
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(
wchar_t *buffer,
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
Parametry
buffer
Umístění úložiště pro výstup
count
Maximální počet znaků, které se mají uložit ve verzi Unicode této funkce
format
Formátovací řetězec
argument
Volitelné argumenty
locale
Národní prostředí, které se má použít
Další informace naleznete v tématu Syntaxe specifikace formátu.
Vrácená hodnota
Počet zapsaných znaků nebo -1, pokud došlo k chybě. Pokud buffer
nebo format
je ukazatel null, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je povolené provádění pokračovat, vrátí tyto funkce hodnotu -1 a nastaví errno
se na EINVAL
hodnotu .
sprintf
vrátí počet bajtů uložených v buffer
, nepočítá ukončující znak null. swprintf
vrátí počet širokých znaků uložených v buffer
, nepočítá ukončující znak s hodnotou null.
Poznámky
Funkce sprintf
formátuje a ukládá řadu znaků a hodnot do buffer
. Každý argument
(pokud existuje) je převeden a výstup podle odpovídající specifikace formátu v format
. Formát se skládá z obyčejných znaků a má stejný tvar a funkci jako format
argument pro printf
. Znak null se připojí za poslední zapsaný znak. Pokud ke kopírování dojde mezi řetězci, které se překrývají, chování není definováno.
Důležité
Použití sprintf
, neexistuje způsob, jak omezit počet zapsaných znaků, což znamená, že použití sprintf
kódu je náchylné k přetečení vyrovnávací paměti. Zvažte použití související funkce snprintf
, která určuje maximální počet znaků pro zápis do buffer
nebo použít _scprintf
k určení, jak velká vyrovnávací paměť je vyžadována. Také se ujistěte, že format
není uživatelem definovaný řetězec.
Počínaje Windows 10 verze 2004 (build 19041) printf
vytiskne řada funkcí přesně reprezentovatelná čísla s plovoucí desetinnou čárkou podle pravidel IEEE 754 pro zaokrouhlování. V předchozích verzích Windows by se vždy zaokrouhlila přesně reprezentovatelná čísla s plovoucí desetinnou čárkou končící na 5. IEEE 754 uvádí, že musí zaokrouhlit na nejbližší sudou číslici (označované také jako "Zaokrouhlování bankera"). Například obě printf("%1.0f", 1.5)
a printf("%1.0f", 2.5)
měly by se zaokrouhlit na 2. Dříve by se 1,5 zaokrouhlo na 2 a 2,5 by se zaokrouhlilo na 3. Tato změna má vliv jenom na přesně reprezentovatelná čísla. Například hodnota 2,35 (která je při znázornění v paměti blíže 2,350000000000008) pokračuje zaokrouhlit nahoru na 2,4. Zaokrouhlování provedené těmito funkcemi nyní respektuje také režim zaokrouhlování s plovoucí desetinou čárkou nastavený .fesetround
Dříve bylo zaokrouhlení vždy zvoleno FE_TONEAREST
chování. Tato změna má vliv jenom na programy vytvořené pomocí sady Visual Studio 2019 verze 16.2 a novější. Pokud chcete použít starší chování zaokrouhlení s plovoucí desetinou čárkou, použijte odkaz na legacy_stdio_float_rounding.obj.
swprintf
je verze širokého znaku sprintf
; argumenty ukazatele na swprintf
jsou řetězce širokých znaků. Detekce chyb kódování se swprintf
může lišit od sprintf
. swprintf
a fwprintf
chovají se stejně s výjimkou swprintf
zápisu výstupu do řetězce, nikoli do cíle typu FILE
, a swprintf
vyžaduje count
, aby parametr určil maximální počet znaků k zápisu. Verze těchto funkcí s příponou _l
jsou shodné s tím rozdílem, že používají parametr národního prostředí předaný místo aktuálního národního prostředí vlákna.
Před standardizovaným podpisem swprintf
byla verze odeslána ve starší knihovně modulu runtime Microsoft C, která nepřebídala parametr počtu znaků. Starší verze je stále dostupná v knihovně modulu runtime Microsoft C, ale je zastaralá a byla přejmenována _swprintf()
. Pro kód, který byl napsán proti staršímu podpisu, definujte _CRT_NON_CONFORMING_SWPRINTFS
, který mapuje volání na swprintf
_swprintf
. V budoucí verzi může být staré chování odebráno, takže kód by měl být změněn tak, aby používal nové vyhovující chování.
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í šablon zabezpečení.
Mapování rutin obecného textu
TCHAR.H rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
_swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
sprintf , _sprintf_l |
<stdio.h> |
swprintf , , _swprintf _swprintf_l |
<stdio.h> nebo <wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad: Použití sprintf
k formátování dat
// 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 );
}
Output:
String: computer
Character: l
Integer: 35
Real: 1.732053
character count = 79
Příklad: Zpracování kódu chyby
// 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 );
}
wrote 11 characters
wrote -1 characters
Viz také
Vstupně-výstupní operace streamu
fprintf
, _fprintf_l
, , fwprintf
_fwprintf_l
printf
, _printf_l
, , wprintf
_wprintf_l
scanf
, _scanf_l
, , wscanf
_wscanf_l
sscanf
, _sscanf_l
, , swscanf
_swscanf_l
vprintf
– funkce