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 AusgabesizeOfBuffer
Maximale Anzahl von Zeichen zu speichern.format
Formatsteuerzeichenfolgeargument
Optionale Argumentelocale
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
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l