Delen via


vsprintf_s, , _vsprintf_s_lvswprintf_s, _vswprintf_s_l, , , _vstprintf_s_vstprintf_s_l

Schrijf geformatteerde uitvoer met behulp van een aanwijzer naar een lijst met argumenten. Deze functies zijn versies van vsprintf, _vsprintf_l, vswprintf, , ' _vswprintf_l__vswprintf_l' met beveiligingsverbeteringen zoals beschreven in beveiligingsfuncties in de CRT.

Zie _vstprintf_sAlgemene-tekstfunctietoewijzingen voor en _vstprintf_s_l

Syntaxis

int vsprintf_s(
   char *buffer,
   size_t numberOfElements,
   const char *format,
   va_list argptr
);
int _vsprintf_s_l(
   char *buffer,
   size_t numberOfElements,
   const char *format,
   _locale_t locale,
   va_list argptr
);
int vswprintf_s(
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *format,
   va_list argptr
);
int _vswprintf_s_l(
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *format,
   _locale_t locale,
   va_list argptr
);
template <size_t size>
int vsprintf_s(
   char (&buffer)[size],
   const char *format,
   va_list argptr
); // C++ only
template <size_t size>
int vswprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   va_list argptr
); // C++ only

Parameterwaarden

buffer
Opslaglocatie voor uitvoer.

numberOfElements
Grootte van buffer in tekens.

format
Formaat specificatie.

argptr
Aanwijzer naar de lijst met argumenten.

locale
De landinstelling die moet worden gebruikt.

Retourwaarde

vsprintf_s en vswprintf_s retourneert het aantal geschreven tekens, niet inclusief het null-teken beƫindigen of een negatieve waarde als er een uitvoerfout optreedt. Als buffer of format een null-aanwijzer is, als numberOfElements deze nul is of als de notatietekenreeks ongeldige opmaaktekens bevat, wordt de ongeldige parameterhandler aangeroepen, zoals beschreven in parametervalidatie. Als de uitvoering mag doorgaan, keren de functies terug -1 en worden ze ingesteld errno op EINVAL.

Zie voor informatie over deze en andere foutcodes , errno,_doserrno , _sys_errlisten _sys_nerr.

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.

vswprintf_s voldoet aan de ISO C-standaard waarvoor vswprintfde tweede parameter, countvan het type size_t, is vereist.

Deze functies verschillen alleen van de niet-beveiligde versies, omdat de beveiligde versies positionele parameters ondersteunen. Zie printf_p Positionele parametersvoor 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.

In C++ wordt het gebruik van deze functies vereenvoudigd door overbelasting van sjablonen. De overbelastingen kunnen de bufferlengte automatisch afleiden, waardoor het niet nodig is om een grootteargument op te geven. En ze kunnen niet-beveiligde functies automatisch vervangen door hun beveiligde tegenhangers. Zie Overbelasting van beveiligde sjablonen voor meer informatie.

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 functietoewijzingen voor tekst

De functie in de tchar.h kolom wordt toegewezen aan de functie in de andere kolommen, afhankelijk van de tekenset die tijdens het compileren is gedefinieerd.

tchar.h functie _UNICODE en _MBCS niet gedefinieerd _MBCS Gedefinieerd _UNICODE Gedefinieerd
_vstprintf_s vsprintf_s vsprintf_s vswprintf_s
_vstprintf_s_l _vsprintf_s_l _vsprintf_s_l _vswprintf_s_l

Behoeften

Routine Vereiste header Optionele headers
vsprintf_s, _vsprintf_s_l <stdio.h> en <stdarg.h> <varargs.h>*
vswprintf_s, _vswprintf_s_l <stdio.h> of <wchar.h>, en <stdarg.h> <varargs.h>*

* Vereist voor UNIX V-compatibiliteit.

Zie Compatibiliteit voor meer compatibiliteitsinformatie.

Voorbeeld

// crt_vsprintf_s.c
// Compile with: cl /W4 crt_vsprintf_s.c
// This program uses vsprintf_s to write to a buffer.
// The size of the buffer is determined by _vscprintf.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

void test( char const * const format, ... )
{
   va_list args;
   int len;
   char * buffer;

   va_start( args, format );
   len = _vscprintf( format, args ) // _vscprintf doesn't count
                               + 1; // terminating '\0'
   buffer = (char *) malloc( len * sizeof(char) );
   if ( NULL != buffer )
   {
      vsprintf_s( buffer, len, format, args );
      puts( buffer );
      free( buffer );
   }
   va_end( args );
}

int main( void )
{
   test( "%d %c %d", 123, '<', 456 );
   test( "%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