_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 buffer
odkazuje .
Tyto funkce se liší od vsprintf_s
vswprintf_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 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
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>* |
* Pož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_end
va_start