_sprintf_p
, _sprintf_p_l
, , _swprintf_p
_swprintf_p_l
Zapište formátovaná data do řetězce s možností určit pořadí, ve kterém se parametry používají ve formátovacím řetězci.
Syntaxe
int _sprintf_p(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument_list]
);
int _sprintf_p_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
_locale_t locale [,
argument_list]
);
int _swprintf_p(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument_list]
);
int _swprintf_p_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
_locale_t locale [,
argument_list]
);
Parametry
buffer
Umístění úložiště pro výstup
sizeOfBuffer
Maximální počet znaků, které se mají uložit
format
Řetězec řízení formátu
argument_list
Volitelné argumenty pro formátovací řetězec
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ě.
Poznámky
Funkce _sprintf_p
formátuje a ukládá řadu znaků a hodnot do buffer
. Každý argument v argument_list
(pokud existuje) je převeden a výstup podle odpovídající specifikace formátu v format
. Argument format
používá syntaxi specifikace formátu pro printf
a wprintf
funkce. 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. Rozdíl mezi _sprintf_p
a sprintf_s
je, že _sprintf_p
podporuje poziční parametry, což umožňuje určit pořadí, ve kterém jsou argumenty použity ve formátovacím řetězci. Další informace naleznete v tématu printf_p
Poziční parametry.
_swprintf_p
je verze širokého znaku _sprintf_p
; argumenty ukazatele na _swprintf_p
jsou řetězce širokých znaků. Detekce chyb kódování se _swprintf_p
může lišit od detekce v _sprintf_p
. _swprintf_p
a fwprintf_p
chovají se identicky s tím rozdílem, že _swprintf_p
zapisuje výstup do řetězce, nikoli do cíle typu FILE
, a _swprintf_p
vyžaduje count
, aby parametr určil maximální počet znaků, které se mají zapsat. 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.
_sprintf_p
vrátí počet bajtů uložených v buffer
, nepočítá ukončující znak null. _swprintf_p
vrátí počet širokých znaků uložených v buffer
, nepočítá ukončující znak s hodnotou null. Pokud buffer
nebo format
je ukazatel null nebo pokud formátovací řetězec obsahuje neplatné znaky formátování, 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 .
Důležité
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.
Mapování rutin obecného textu
TCHAR.H rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_stprintf_p |
_sprintf_p |
_sprintf_p |
_swprintf_p |
_stprintf_p_l |
_sprintf_p_l |
_sprintf_p_l |
_swprintf_p_l |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_sprintf_p , _sprintf_p_l |
<stdio.h> |
_swprintf_p , _swprintf_p_l |
<stdio.h> nebo <wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad: Použití _sprintf_p
k formátování dat
// crt_sprintf_p.c
// This program uses _sprintf_p 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_p( buffer, 200,
" String: %s\n", s );
j += _sprintf_p( buffer + j, 200 - j,
" Character: %c\n", c );
j += _sprintf_p( buffer + j, 200 - j,
" Integer: %d\n", i );
j += _sprintf_p( buffer + j, 200 - j,
" Real: %f\n", fp );
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_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
wchar_t buffer[BUFFER_SIZE];
int len;
len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
0, L" marbles in your head.");
_printf_p( "Wrote %d characters\n", len );
// _swprintf_p fails because string contains WEOF (\xffff)
len = _swprintf_p(buffer, BUFFER_SIZE, L"%s",
L"Hello\xffff world" );
_printf_p( "Wrote %d characters\n", len );
}
Wrote 24 characters
Wrote -1 characters
Viz také
Vstupně-výstupní operace streamu
_fprintf_p
, _fprintf_p_l
, , _fwprintf_p
_fwprintf_p_l
fprintf
, _fprintf_l
, , fwprintf
_fwprintf_l
_printf_p
, _printf_p_l
, , _wprintf_p
_wprintf_p_l
printf
, _printf_l
, , wprintf
_wprintf_l
sprintf
, _sprintf_l
, swprintf
, , _swprintf_l
__swprintf_l
scanf
, _scanf_l
, , wscanf
_wscanf_l
sscanf
, _sscanf_l
, , swscanf
_swscanf_l
sscanf_s
, _sscanf_s_l
, , swscanf_s
_swscanf_s_l
vprintf
– funkce
printf_p
Poziční parametry