Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Skriv formaterade utdata med hjälp av en pekare till en lista med argument, med möjlighet att ange i vilken ordning argumenten ska användas.
Syntax
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
);
Parameterar
buffer
Lagringsplats för utdata.
sizeInBytes
Storlek på buffer tecken.
count
Maximalt antal tecken som ska lagras i UNICODE-versionen av den här funktionen.
format
Specifikation av format.
argptr
Pekare till en lista med argument.
locale
Språkvarianten som ska användas.
Returvärde
_vsprintf_p och _vswprintf_p returnerar antalet skrivna tecken, exklusive det avslutande NULL tecknet, eller ett negativt värde om ett utdatafel inträffar.
Om är buffer en NULL pekare och sizeInBytes eller count är noll returnerar funktionerna det antal tecken som skulle ha skrivits, exklusive den avslutande NULL.
Om värdet buffer är giltigt och sizeInBytes eller count är noll returneras -1.
Anmärkningar
Var och en av dessa funktioner tar en pekare till en argumentlista och formaterar och skriver sedan de angivna data till minnet som pekas på av buffer.
Dessa funktioner skiljer sig från vsprintf_s och vswprintf_s endast genom att de stöder positionsparametrar. Mer information finns i printf_p Positionsparametrar.
Versionerna av dessa funktioner med suffixet _l är identiska, förutom att de använder parametern locale som skickas i stället för den aktuella trådspråkinställningen.
Om parametrarna buffer eller format är NULL pekare, eller om formatsträngen innehåller ogiltiga formateringstecken, anropas den ogiltiga parameterhanteraren enligt beskrivningen i Parametervalidering. Om körningen tillåts fortsätta returnerar funktionerna -1 och ställs in errno på EINVAL.
Viktigt!
Från och med Windows 10 version 2004 (version 19041) skriver funktionsfamiljen printf ut exakt representerande flyttalsnummer enligt IEEE 754-reglerna för avrundning. I tidigare versioner av Windows skulle exakt representerande flyttalsnummer som slutar på "5" alltid avrunda uppåt. IEEE 754 anger att de måste avrunda till den närmaste jämna siffran (även kallat "Bankers avrundning"). Till exempel bör både printf("%1.0f", 1.5) och printf("%1.0f", 2.5) avrunda till 2. Tidigare skulle 1,5 avrunda till 2 och 2,5 skulle avrunda till 3. Den här ändringen påverkar endast exakt representerande tal. Till exempel fortsätter 2.35 (som, när det representeras i minnet, är närmare 2.3500000000000000008) att avrunda upp till 2,4. Avrundning som utförs av dessa funktioner respekterar nu också flyttalsrundningsläget som anges av fesetround. Tidigare valde FE_TONEAREST avrundning alltid beteende. Den här ändringen påverkar endast program som skapats med Visual Studio 2019 version 16.2 och senare. Om du vill använda det äldre avrundningsbeteendet för flyttalser länkar du till legacy_stdio_float_rounding.obj.
Allmän textrutinmappning
| TCHAR. H-rutin |
_UNICODE och _MBCS inte definierat |
_MBCS definierad |
_UNICODE definierad |
|---|---|---|---|
_vstprintf_p |
_vsprintf_p |
_vsprintf_p |
_vswprintf_p |
_vstprintf_p_l |
_vsprintf_p_l |
_vsprintf_p_l |
_vswprintf_p_l |
Kravspecifikation
| Rutin | Obligatoriskt huvud | Valfria rubriker |
|---|---|---|
_vsprintf_p, _vsprintf_p_l |
<stdio.h> och <stdarg.h> | <varargs.h>* |
_vswprintf_p, _vswprintf_p_l |
<stdio.h> eller <wchar.h> och <stdarg.h> | <varargs.h>* |
* Krävs för UNIX V-kompatibilitet.
Mer kompatibilitetsinformation finns i Kompatibilitet.
Exempel
// 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
Se även
Stream I/O-
vprintf funktioner
Syntax för formatspecifikation: printf och wprintf funktioner
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