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. Deze functies zijn versies van sprintf, _sprintf_l, swprintf, _swprintf_l, met __swprintf_l beveiligingsverbeteringen zoals beschreven in Beveiligingsfuncties in de CRT.
Syntaxis
int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   ...
);
int _sprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   _locale_t locale,
   ...
);
int swprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   ...
);
int _swprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   _locale_t locale,
   ...
);
template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format,
   ...
); // C++ only
template <size_t size>
int swprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   ...
); // C++ only
Parameterwaarden
buffer
Opslaglocatie voor uitvoer
sizeOfBuffer
Maximum aantal tekens dat moet worden opgeslagen.
format
Tekenreeks voor besturingselement opmaken
...
Optionele argumenten die moeten worden opgemaakt
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 en swprintf_ssprintf_s -1 retourneert en instelt errno op EINVAL.
              sprintf_s retourneert het aantal bytes dat is opgeslagen in buffer, waarbij het null-teken voor het beëindigen niet wordt geteld. 
              swprintf_s retourneert het aantal brede tekens dat is opgeslagen in buffer, waarbij het afsluitende null-brede teken niet wordt geteld.
Opmerkingen
De sprintf_s 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.
Een belangrijk verschil tussen sprintf_s en sprintf is dat sprintf_s de notatietekenreeks wordt gecontroleerd op geldige opmaaktekens, terwijl sprintf alleen wordt gecontroleerd of de notatietekenreeks of buffer aanwijzers zijn NULL . Als een van beide controles mislukt, wordt de ongeldige parameterhandler aangeroepen, zoals beschreven in parametervalidatie. Als de uitvoering mag worden voortgezet, retourneert de functie -1 en wordt ingesteld errno op EINVAL.
Het andere belangrijkste verschil tussen sprintf_s en sprintf is dat er sprintf_s een lengteparameter nodig is die de grootte van de uitvoerbuffer in tekens aangeeft. Als de buffer te klein is voor de opgemaakte tekst, inclusief de afsluit-null, wordt de buffer ingesteld op een lege tekenreeks door een null-teken op buffer[0]te plaatsen en wordt de ongeldige parameterhandler aangeroepen. In tegenstelling tot _snprintf, sprintf_s garandeert u dat de buffer null-beëindigd wordt, tenzij de buffergrootte nul is.
              swprintf_s is een brede versie van sprintf_s; de aanwijzerargumenten die swprintf_s tekenreeksen breed zijn. Detectie van coderingsfouten in swprintf_s kan afwijken van de detectie in sprintf_s. 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 meer nodig is om een grootteargument op te geven. En ze kunnen automatisch oudere, niet-beveiligde functies vervangen door nieuwere, veiligere tegenhangers. Zie Overbelasting van beveiligde sjablonen voor meer informatie.
Er zijn versies van sprintf_s die meer controle bieden over wat er gebeurt als de buffer te klein is. Zie , _snprintf_s, , voor _snprintf_s_l_snwprintf_smeer informatie_snwprintf_s_l.
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 | 
|---|---|---|---|
_stprintf_s | 
sprintf_s | 
sprintf_s | 
swprintf_s | 
_stprintf_s_l | 
_sprintf_s_l | 
_sprintf_s_l | 
_swprintf_s_l | 
Behoeften
| Routine | Vereiste header | 
|---|---|
              sprintf_s, _sprintf_s_l | 
C: <stdio.h> C++: <cstdio> of <stdio.h>  | 
              swprintf_s, _swprintf_s_l | 
C: <stdio.h> of <wchar.h> C++: <cstdio>, <cwchar>, <stdio.h> of <wchar.h>  | 
Zie Compatibiliteit voor meer compatibiliteitsinformatie.
Voorbeeld: Sprintf_s gebruiken om gegevens op te maken
// crt_sprintf_s.c
// This program uses sprintf_s 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_s( buffer, 200,     "   String:    %s\n", s );
   j += sprintf_s( buffer + j, 200 - j, "   Character: %c\n", c );
   j += sprintf_s( buffer + j, 200 - j, "   Integer:   %d\n", i );
   j += sprintf_s( buffer + j, 200 - j, "   Real:      %f\n", fp );
   printf_s( "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_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>
int main( void )
{
   wchar_t buf[100];
   int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf_s 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
              
              sprintf
              swprintf, _sprintf_l, _swprintf_l__swprintf_l
              
              scanf, , , _scanf_lwscanf_wscanf_l
              
              sscanf, , , _sscanf_lswscanf_swscanf_l
              
              vprintf functies