Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Schrijf geformatteerde uitvoer met behulp van een aanwijzer naar een lijst met argumenten, met de mogelijkheid om de volgorde op te geven waarin de argumenten worden gebruikt.
Syntaxis
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
);
Parameterwaarden
buffer
Opslaglocatie voor uitvoer.
sizeInBytes
Grootte van buffer in tekens.
count
Maximum aantal tekens dat moet worden opgeslagen in de UNICODE-versie van deze functie.
format
Formaat specificatie.
argptr
Aanwijzer naar de lijst met argumenten.
locale
De te gebruiken locale.
Retourwaarde
_vsprintf_p en _vswprintf_p retourneert het aantal geschreven tekens, exclusief het afsluitende NULL teken, of een negatieve waarde als er een uitvoerfout optreedt.
Als de buffer een NULL aanwijzer is en sizeInBytes /of count nul is, retourneren functies het aantal tekens dat zou zijn geschreven, exclusief de afsluitende NULL.
Als de geldig is en buffer of sizeInBytes nul is, geeft u count -1 terug.
Opmerkingen
Elk van deze functies neemt een aanwijzer naar een argumentenlijst en formatteert en schrijft vervolgens de gegeven gegevens naar het geheugen waarnaar wordt verwezen door buffer.
Deze functies verschillen van de vsprintf_s en vswprintf_s alleen in die zin dat ze positionele parameters ondersteunen. Zie printf_p Positieparameters voor meer informatie.
De versies van deze functies met het _l achtervoegsel zijn identiek, behalve dat ze de locale-parameter gebruiken die wordt doorgegeven in plaats van de huidige thread-locale.
Als de buffer parameters of format aanwijzers zijn NULL of als de opmaaktekenreeks ongeldige opmaaktekens bevat, wordt de ongeldige parameterafhandeling aangeroepen, zoals beschreven in Parametervalidatie. Als de uitvoering mag doorgaan, keren de functies terug -1 en worden ze ingesteld errno op EINVAL.
Belangrijk
Vanaf Windows 10 versie 2004 (build 19041) drukt de printf reeks functies exact vertegenwoordigbare zwevende kommanummers af volgens de IEEE 754-regels voor afronding. In eerdere versies van Windows zouden de zwevende kommanummers die eindigen op '5' altijd naar boven afronden. IEEE 754 geeft aan dat ze moeten afronden op het dichtstbijzijnde even cijfer (ook wel bekend als 'Afronding van bankier'). Beide moeten bijvoorbeeld printf("%1.0f", 1.5)printf("%1.0f", 2.5) worden afgerond op 2. Voorheen zou 1,5 afronden op 2 en 2,5 naar 3. Deze wijziging is alleen van invloed op exact vertegenwoordigbare getallen. Bijvoorbeeld: 2.35 (die, wanneer deze wordt weergegeven in het geheugen, dichter bij 2.350000000000008) blijft afronden tot 2,4. Afronding die door deze functies wordt uitgevoerd, respecteert nu ook de drijvende-komma-afrondingsmodus die is ingesteld door fesetround. Eerder koos afronding altijd voor FE_TONEAREST gedrag. Deze wijziging is alleen van invloed op programma's die zijn gebouwd met Visual Studio 2019 versie 16.2 en hoger. Als u het verouderde drijvendekomma-afrondingsgedrag wilt gebruiken, moet u een koppeling maken met legacy_stdio_float_rounding.obj.
Algemene routinetoewijzingen voor tekst
| TCHAR. H-routine |
_UNICODE en _MBCS niet gedefinieerd |
_MBCS Gedefinieerd |
_UNICODE Gedefinieerd |
|---|---|---|---|
_vstprintf_p |
_vsprintf_p |
_vsprintf_p |
_vswprintf_p |
_vstprintf_p_l |
_vsprintf_p_l |
_vsprintf_p_l |
_vswprintf_p_l |
Behoeften
| Routine | Vereiste header | Optionele headers |
|---|---|---|
_vsprintf_p, _vsprintf_p_l |
<stdio.h> en <stdarg.h> | <varargs.h>* |
_vswprintf_p, _vswprintf_p_l |
<stdio.h> of <wchar.h>, en <stdarg.h> | <varargs.h>* |
* Vereist voor UNIX V-compatibiliteit.
Zie Compatibiliteit voor meer compatibiliteitsinformatie.
Voorbeeld
// 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
Zie ook
Stream I/O-
vprintf functies
Syntaxis van formaatspecificatie: printf en wprintf functies
fprintf, , , _fprintf_lfwprintf_fwprintf_l
printf, , , _printf_lwprintf_wprintf_l
sprintf
swprintf, _sprintf_l, _swprintf_l__swprintf_l
va_arg, , , va_copyva_endva_start