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.
Opgemaakte gegevens naar een tekenreeks schrijven. Er zijn veiligere versies van sommige van deze functies beschikbaar; zie sprintf_s, _sprintf_s_l, swprintf_s, . _swprintf_s_l De beveiligde versies van swprintf en _swprintf_l nemen de grootte van de buffer als parameter.
Syntaxis
int sprintf(
   char *buffer,
   const char *format [,
   argument] ...
);
int _sprintf_l(
   char *buffer,
   const char *format,
   _locale_t locale [,
   argument] ...
);
int swprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument]...
);
int _swprintf(
   wchar_t *buffer,
   const wchar_t *format [,
   argument]...
);
int _swprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   _locale_t locale [,
   argument] ...
);
int __swprintf_l(
   wchar_t *buffer,
   const wchar_t *format,
   _locale_t locale [,
   argument] ...
);
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
   argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
   char (&buffer)[size],
   const char *format,
   _locale_t locale [,
   argument] ...
); // C++ only
Parameterwaarden
buffer
Opslaglocatie voor uitvoer
count
Maximum aantal tekens dat moet worden opgeslagen in de Unicode-versie van deze functie.
format
Tekenreeks voor besturingselement opmaken
argument
Optionele argumenten
locale
De landinstelling die moet worden gebruikt.
Zie Specificatiesyntaxis opmaken voor meer informatie.
Retourwaarde
Het aantal geschreven tekens of -1 als er een fout is opgetreden. Als buffer of format een null-aanwijzer is, wordt de ongeldige parameterhandler aangeroepen, zoals beschreven in parametervalidatie. Als de uitvoering mag doorgaan, worden deze functies teruggezet -1 en ingesteld errno op EINVAL.
              sprintf retourneert het aantal bytes dat is opgeslagen in buffer, waarbij het null-teken voor het beƫindigen niet wordt geteld. 
              swprintf retourneert het aantal brede tekens dat is opgeslagen in buffer, waarbij het afsluitende null-brede teken niet wordt geteld.
Opmerkingen
De sprintf functie formatteert en slaat een reeks tekens en waarden op in buffer. Elke argument (indien aanwezig) wordt geconverteerd en uitvoer volgens de bijbehorende indelingsspecificatie in format. De notatie bestaat uit gewone tekens en heeft dezelfde vorm en functie als het argument format voor printf. Er wordt een null-teken toegevoegd nadat het laatste teken is geschreven. Als kopiƫren plaatsvindt tussen tekenreeksen die overlappen, is het gedrag niet gedefinieerd.
Belangrijk
Het gebruik van sprintf, er is geen manier om het aantal geschreven tekens te beperken, wat betekent dat code die wordt gebruikt sprintf vatbaar is voor bufferoverschrijdingen. Overweeg het gebruik van de gerelateerde functie snprintf, waarmee een maximum aantal tekens wordt opgegeven waarnaar moet worden geschreven bufferof om _scprintf te bepalen hoe groot een buffer is. Zorg er ook voor dat dit format geen door de gebruiker gedefinieerde tekenreeks is.
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.
              swprintf is een brede versie van sprintf; de aanwijzerargumenten die swprintf tekenreeksen breed zijn. Detectie van coderingsfouten in swprintf kan verschillen van sprintf. 
              swprintf en fwprintf gedraagt zich identiek, behalve swprintf schrijfuitvoer naar een tekenreeks in plaats van naar een bestemming van het type FILE, en swprintf vereist de count parameter om het maximum aantal tekens op te geven dat moet worden geschreven. De versies van deze functies met het _l achtervoegsel zijn identiek, behalve dat ze de landinstellingsparameter gebruiken die wordt doorgegeven in plaats van de huidige landinstelling voor threads.
Voordat de handtekening is swprintf gestandaardiseerde, is er een versie geleverd in een oudere Microsoft C-runtimebibliotheek die de parameter voor het aantal tekens niet heeft gebruikt. De oudere versie is nog steeds beschikbaar in de Microsoft C Runtime-bibliotheek, maar is afgeschaft en de naam ervan is gewijzigd _swprintf(). Definieer _CRT_NON_CONFORMING_SWPRINTFSvoor code die is geschreven op basis van de oudere handtekening, waarmee aanroepen worden toegewezen swprintf_swprintf. In een toekomstige versie kan het oude gedrag worden verwijderd, dus code moet worden gewijzigd om het nieuwe conforme gedrag te gebruiken.
In C++ hebben deze functies een overbelasting van sjablonen die de nieuwere, veilige tegenhangers van deze functies aanroepen. Zie Overbelasting van beveiligde sjablonen voor meer informatie.
Algemene routinetoewijzingen voor tekst
              TCHAR.H routine | 
              _UNICODE en _MBCS niet gedefinieerd | 
              _MBCS Gedefinieerd | 
              _UNICODE Gedefinieerd | 
|---|---|---|---|
_stprintf | 
sprintf | 
sprintf | 
_swprintf | 
_stprintf_l | 
_sprintf_l | 
_sprintf_l | 
__swprintf_l | 
Behoeften
| Routine | Vereiste header | 
|---|---|
              sprintf, _sprintf_l | 
<stdio.h> | 
              swprintf, , _swprintf_swprintf_l | 
              <stdio.h> of <wchar.h> | 
Zie Compatibiliteit voor meer compatibiliteitsinformatie.
Voorbeeld: Gegevens sprintf opmaken
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf to format various
// data and place them in the string named buffer.
#include <stdio.h>
int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;
   // Format and print various data:
   j  = sprintf( buffer,     "   String:    %s\n", s ); // C4996
   j += sprintf( buffer + j, "   Character: %c\n", c ); // C4996
   j += sprintf( buffer + j, "   Integer:   %d\n", i ); // C4996
   j += sprintf( buffer + j, "   Real:      %f\n", fp );// C4996
   // Note: sprintf is deprecated; consider using sprintf_s instead
   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
Output:
   String:    computer
   Character: l
   Integer:   35
   Real:      1.732053
character count = 79
Voorbeeld: Verwerking van foutcodes
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
   wchar_t buf[100];
   int len = swprintf( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
wrote 11 characters
wrote -1 characters
Zie ook
              Stream I/O-
              
              fprintf, , , _fprintf_lfwprintf_fwprintf_l
              
              printf, , , _printf_lwprintf_wprintf_l
              
              scanf, , , _scanf_lwscanf_wscanf_l
              
              sscanf, , , _sscanf_lswscanf_swscanf_l
              
              vprintf functies