Freigeben über


sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

Write formatierte Daten in eine Zeichenfolge.Dies sind Versionen von sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l mit beschrieben, wie unter Security Enhancements in Sicherheitsfeatures im CRT.

int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
   argument] ... 
);
int _sprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format [,
   argument]...
);
int _swprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   locale_t locale [,
   argument]…
);
template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format [,
   argument]...
); // C++ only

Parameter

  • buffer
    Speicherort für die Ausgabe

  • sizeOfBuffer
    Maximale Anzahl von Zeichen zu speichern.

  • format
    Formatsteuerzeichenfolge

  • argument
    Optionale Argumente

  • locale
    Das zu verwendende Gebietsschema.

Weitere Informationen finden Sie unter Formatangaben.

Rückgabewert

Die Anzahl der geschriebenen Zeichen oder 1, wenn ein Fehler aufgetreten ist.Wenn buffer oder format ein NULL-Zeiger zurückgegeben werden sollen, und sprintf_sswprintf_s -1, und legen errno zu EINVAList.

sprintf_s gibt die Anzahl von Bytes zurück, die in buffergespeichert werden und keine zählt das NULL.swprintf_s gibt die Anzahl der Breitzeichen zurück, die in buffergespeichert werden und keine zählt das Breitzeichen des abschließenden NULL-Zeichens.

Hinweise

Die sprintf_s-Funktion formatiert und speichert eine Reihe von Zeichen und Werte in buffer.Jedes argument (falls vorhanden) wird und Ausgabe entsprechend der entsprechenden Formatelement in formatkonvertiert.Das Format besteht aus normalen Zeichen und weist das gleiche Funktion wie das Formular, und format-Argument für printf.Ein NULL-Zeichen wird nach dem letzten geschriebenen Zeichen angehängt.Wenn das Kopieren zwischen Zeichenfolgen auftritt, die sich überschneiden, ist das Verhalten nicht definiert.

Ein Haupter Unterschied zwischen sprintf_s und sprintf ist, dass in der Formatzeichenfolge sprintf_s Formatierung für gültige Zeichen überprüft, während sprintf überprüft nur, wenn der Puffer oder in der Formatzeichenfolge NULL Zeiger sind.Wenn eine Überprüfung fehlschlägt, wird der Ereignishandler aufgerufen, z. B. ungültige Parameter in Parametervalidierungbeschrieben.Wenn die Ausführung ermöglicht wird, um fortzufahren, gibt die Funktion -1 zurück und legt ihn fest. EINVALzu errno

Der Hauptunterschied zwischen sprintf_s und andere sprintf besteht darin, dass sprintf_s einen Längenparameter annimmt, der die Größe des Ausgabepuffers in Zeichen angibt.Wenn der Puffer ist zu klein für den Text, der gedruckt wird, wird der Puffer auf eine leere Zeichenfolge festgelegt und die ungültige Parameter Ereignishandler wird aufgerufen.Im Gegensatz zu snprintfsprintf_s sichergestellt, dass der Puffer mit Null endendes ist (es sei denn, die Puffergröße null).

swprintf_s ist eine Breitzeichen-Version von sprintf_s. Zeiger auf die Argumente swprintf_s sind Zeichenfolgen mit Breitzeichen.Erkennung von Codierungsfehlern in swprintf_s unterscheidet möglicherweise von der in sprintf_s.Die Versionen dieser Funktionen mit dem _l Suffix sind identisch, mit der Ausnahme, dass sie verwenden den Gebietsschemaparameter, der anstelle des aktuellen Threads gebietsschemas übergeben wird.

In C++ unter Verwendung dieser Funktionen wird von Vorlagen Operatoren vereinfacht. Die Überladungen können die Pufferlänge (die Anforderung automatisch beseitigend ableiten, die ein Argument angegeben) und können nicht-sicheren, die älteren Funktionen über ihre Äquivalente sicheren, aktuelleren automatisch ersetzen.Weitere Informationen finden Sie unter Speichern Sie Vorlagen-Überladungen.

Es gibt Versionen von sprintf_s anbieten, die zusätzliche Kontrolle darüber, was geschieht, wenn der Puffer zu klein ist.Weitere Informationen finden Sie unter _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

Zuweisung generischer Textroutinen

TCHAR.H-Routine

_UNICODE & _MBCS nicht definiert

_MBCS definieren

_UNICODE definiert

_stprintf_s

sprintf_s

sprintf_s

swprintf_s

_stprintf_s_l

_sprintf_s_l

_sprintf_s_l

_swprintf_s_l

Anforderungen

Routine

Erforderlicher Header

sprintf_s, _sprintf_s_l

<stdio.h>

swprintf_s, _swprintf_s_l

<stdio.h> oder <wchar.h>

Um Kompatibilität zusätzlichen Informationen finden Sie unter Kompatibilität in der Einführung.

Beispiel

// 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 );
}
  
// 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 );
}
  

.NET Framework-Entsprechung

[M:System::String::Format]

Siehe auch

Referenz

Stream E/A

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

vprintf Funktionen