Sdílet prostřednictvím


_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 EINVALhodnotu .

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