Sdílet prostřednictvím


_vsprintf_p, _vsprintf_p_l, , _vswprintf_p_vswprintf_p_l

Formátovaný výstup můžete zapisovat 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 ve znacích.

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.

Návratová hodnota

_vsprintf_p a _vswprintf_p vrátí počet zapsaných znaků, bez ukončujícího NULL znaku, nebo zápornou hodnotu, pokud dojde k chybě výstupu. buffer Pokud je NULL ukazatel a sizeInBytes nebo count jsou nula, funkce vrátí počet znaků, které by byly zapsány bez ukončujícího NULL. Pokud je argument valid buffer a sizeInBytes nebo count are nula, vrátí hodnotu -1.

Poznámky

Každá z těchto funkcí převezme ukazatel na seznam argumentů a poté zformátuje a zapíše daná data do paměti, na kterou ukazuje buffer.

Tyto funkce se liší od a vsprintf_svswprintf_s pouze v tom, že podporují poziční parametry. Další informace naleznete v části printf_p poziční parametry.

Verze těchto funkcí s příponou _l jsou identické s tím rozdílem, že používají předaný parametr locale namísto aktuálního národního prostředí vlákna.

buffer Pokud jsou format parametry nebo NULL ukazatele nebo pokud formátovací řetězec obsahuje neplatné formátovací znaky, je vyvolána obslužná rutina neplatného parametru, jak je popsáno v části Ověření parametru. Pokud je povoleno pokračovat v provádění, funkce vrátí -1 a nastaví errno se na EINVAL.

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ší. Chcete-li použít starší chování zaokrouhlování s plovoucí desetinou čárkou, propojte s legacy_stdio_float_rounding.obj.

Mapování rutin obecného textu

Rutina TCHAR.H _UNICODE a _MBCS není definován _MBCS definovaný _UNICODE definovaný
_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>*

* Vyžadováno pro kompatibilitu se systémem 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_endva_start