Share via


_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l

Napište formátovaný výstup pomocí ukazatele na seznam argumentů s možností určit pořadí, ve kterém se argumenty používají.

Syntaxe

int _vsprintf_p(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   va_list argptr
);
int _vsprintf_p_l(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   _locale_t locale,
   va_list argptr
);
int _vswprintf_p(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   va_list argptr
);
int _vswprintf_p_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   _locale_t locale,
   va_list argptr
);

Parametry

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

sizeInBytes
buffer Velikost znaků

count
Maximální počet znaků, které se mají uložit, ve verzi UNICODE této funkce.

format
Specifikace formátu

argptr
Ukazatel na seznam argumentů

locale
Národní prostředí, které se má použít

Vrácená hodnota

_vsprintf_p a _vswprintf_p vrátí počet zapsaných znaků, které neobsahují ukončující znak null nebo zápornou hodnotu, pokud dojde k výstupní chybě.

Poznámky

Každá z těchto funkcí vezme ukazatel na seznam argumentů a pak formátuje a zapíše daná data do paměti, na kterou bufferodkazuje .

Tyto funkce se liší od vsprintf_svswprintf_s a pouze v tom, že podporují poziční parametry. Další informace najdete v tématu printf_p poziční parametry.

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.

buffer Pokud jsou NULL ukazatele nebo format parametry, pokud je počet nula 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 možné pokračovat spuštěním, funkce vrátí 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

Rutina TCHAR.H _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_vstprintf_p _vsprintf_p _vsprintf_p _vswprintf_p
_vstprintf_p_l _vsprintf_p_l _vsprintf_p_l _vswprintf_p_l

Požadavky

Rutina Požadovaný hlavičkový soubor Volitelná záhlaví
_vsprintf_p, _vsprintf_p_l <stdio.h> a <stdarg.h> <varargs.h>*
_vswprintf_p, _vswprintf_p_l <stdio.h> nebo <wchar.h> a <stdarg.h> <varargs.h>*

* Požadováno pro kompatibilitu systém UNIX V.

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// crt__vsprintf_p.c
// This program uses vsprintf_p to write to a buffer.
// The size of the buffer is determined by _vscprintf_p.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

void example( char * format, ... )
{
    va_list  args;
    int      len;
    char     *buffer = NULL;

    va_start( args, format );

    // _vscprintf doesn't count the
    // null terminating string so we add 1.
    len = _vscprintf_p( format, args ) + 1;

    // Allocate memory for our buffer
    buffer = (char*)malloc( len * sizeof(char) );
    if (buffer)
    {
        _vsprintf_p( buffer, len, format, args );
        puts( buffer );
        free( buffer );
    }
    va_end( args );
}

int main( void )
{
    // First example
    example( "%2$d %1$c %3$d", '<', 123, 456 );

    // Second example
    example( "%s", "This is a string" );
}
123 < 456
This is a string

Viz také

Vstupně-výstupní operace streamu
vprintf – funkce
Syntaxe specifikace formátu: printf a wprintf funkce
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
va_arg, va_copy, va_end, va_start