sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
Schreiben Sie formatierte Daten in eine Zeichenfolge. Sicherere Versionen einiger dieser Funktionen sind verfügbar. Informationen dazu finden Sie unter sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. Die sicheren Versionen von swprintf und _swprintf_l akzeptieren keinen count-Parameter.
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_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
template <size_t size>
int swprintf(
wchar_t (&buffer)[size],
const wchar_t *format [,
argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
wchar_t (&buffer)[size],
const wchar_t *format,
locale_t locale [,
argument] ...
); // C++ only
Parameter
buffer
Speicherort für die Ausgabecount
Maximale Anzahl, der in der Unicode-Version dieser Funktion zu speichernde Zeichen.format
Formatsteuerzeichenfolgeargument
Optionale Argumentelocale
Das zu verwendende Gebietsschema.
Weitere Informationen finden Sie unter Formatangaben.
Rückgabewert
Die Anzahl geschriebener Zeichen oder "– 1" bei einem Fehler. Wenn buffer oder format ein NULL-Zeiger ist, wird, wie in Parametervalidierung beschrieben, der Handler für ungültige Parameter aufgerufen. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen "– 1" zurück und legen errno auf EINVAL fest.
sprintf gibt die in buffer gespeicherte Byteanzahl zurück. Das beendende NULL-Zeichen wird dabei nicht mitgezählt. swprintf gibt die Anzahl der Breitzeichen zurück, die in buffer gespeicherten und nicht angerechnet das endgültige NULL-Zeichen-Breitzeichen.
Hinweise
Die sprintf-Funktion formatiert und speichert eine Reihe von Zeichen und Werte in buffer. Jedes argument (falls vorhanden) wird entsprechend der jeweiligen Formatangabe in format konvertiert und ausgegeben. Das Format besteht aus normalen Zeichen und hat die gleiche Form und Funktion wie das format-Argument für printf. Ein NULL-Zeichen wird nach dem letzten geschriebenen Zeichen angefügt. Wenn der Kopiervorgang zwischen Zeichenfolgen ausgeführt wird, die sich überschneiden, ist das Verhalten nicht definiert.
Sicherheitshinweis |
---|
Bei der Verwendung von sprintf gibt es keine Möglichkeit, die Anzahl der geschriebenen Zeichen einzuschränken. Demnach ist Code mit sprintf für Pufferüberläufe anfällig.Erwägen Sie die Verwendung der verwandten Funktion _snprintf, die eine Maximalzahl für Zeichen angibt, die an buffer geschrieben werden können, oder verwenden Sie _scprintf, um die Größe des erforderlichen Puffers zu bestimmen.Stellen Sie zudem sicher, dass format keine benutzerdefinierte Zeichenfolge ist. |
swprintf ist eine Breitzeichen-Version von sprintf. Die Zeigerargumente zu swprintf sind Breitzeichen-Zeichenfolgen. Die Erkennung von Codierungsfehlern in swprintf unterscheidet sich möglicherweise von der in sprintf. swprintf und fwprintf identisch verhalten sich, dass swprintf schreibt Ausgabe in eine Zeichenfolge anstatt an ein Silverlight-Ziel vom Typ FILE, und swprintf erfordert den count-Parameter, die maximale Anzahl der zu schreibenden Zeichen anzugeben. Die Versionen dieser Funktionen mit dem _l-Suffix sind beinahe identisch, verwenden jedoch den ihnen übergebenen Gebietsschemaparameter anstelle des aktuellen Threadgebietsschemas.
swprintf ist zum ISO-C-Standard konform. Dieser erfordert den zweiten Parameter count des size_t-Typs. Um das alte, nicht dem Standard entsprechende, Verhalten zu erzwingen, definieren Sie _CRT_NON_CONFORMING_SWPRINTFS. In einer zukünftigen Version wird das alte Verhalten möglicherweise entfernt. Daher sollte Code so geändert werden, dass das neue konforme Verhalten verwendet wird.
In C++ haben diese Funktionen Vorlagenüberladungen, mit denen die neueren, sicheren Entsprechungen dieser Funktionen aufgerufen werden. Weitere Informationen finden Sie unter Sichere Vorlagenüberladungen.
Zuordnung generischer Textroutinen
TCHAR.H-Routine |
_UNICODE & _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Anforderungen
Routine |
Erforderlicher Header |
---|---|
sprintf, _sprintf_l |
<stdio.h> |
swprintf, _swprintf_l |
<stdio.h> oder <wchar.h> |
Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.
Beispiel
// 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 );
}
// 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 );
}
.NET Framework-Entsprechung
Siehe auch
Referenz
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l