Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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