sscanf
, , _sscanf_l
swscanf
_swscanf_l
Lesen von formatierten Daten aus einer Zeichenfolge Sicherere Versionen dieser Funktionen sind verfügbar; siehe sscanf_s
, , _sscanf_s_l
, . _swscanf_s_l
swscanf_s
Syntax
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_l(
const char *buffer,
const char *format,
_locale_t locale [,
argument ] ...
);
int swscanf(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_l(
const wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument ] ...
);
Parameter
buffer
Gespeicherte Daten
format
Formatsteuerzeichenfolge. Weitere Informationen finden Sie unter Formatspezifikations-Syntax.
argument
Optionale Argumente
locale
Das zu verwendende Gebietsschema
Rückgabewert
Jede dieser Funktionen gibt die Anzahl der felder zurück, die erfolgreich konvertiert und zugewiesen wurden; Der Rückgabewert enthält keine Felder, die gelesen, aber nicht zugewiesen wurden. Ein Rückgabewert von 0 gibt an, dass keine Felder zugewiesen wurden. Der Rückgabewert bei einem Fehler oder beim Erreichen des Endes der Zeichenfolge vor der ersten Konvertierung lautet EOF
.
Wenn buffer
oder format
ein NULL
Zeiger ist, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen "– 1" zurück und legen errno
auf EINVAL
fest.
Weitere Informationen zu diesen und anderen Fehlercodes finden Sie unter errno
, _doserrno
, _sys_errlist
und _sys_nerr
.
Hinweise
Die sscanf
-Funktion liest Daten aus buffer
in den Speicherort, der durch das jeweilige argument
angegeben wird. Jedes argument
muss ein Zeiger auf einen Variablentyp sein, der einem Typspezifizierer im format
entspricht. Das format
-Argument steuert die Interpretation der Eingabefelder und hat die gleiche Form und Funktion wie das format
-Argument für die scanf
-Funktion. Wenn der Kopiervorgang zwischen Zeichenfolgen ausgeführt wird, die sich überschneiden, ist das Verhalten nicht definiert.
Informationen zu Feldzeichen vom Typ Scanf finden Sie unter scanf
Typfeldzeichen. Informationen zu Den Feldern der Scanf-Formatspezifikation finden Sie unter "Formatspezifikationsfelder".
Wichtig
Geben Sie beim Lesen einer Zeichenfolge mit sscanf
, immer eine Breite für das %s
Format an (z . B. "%32s
" anstelle von "%s
"); andernfalls kann eine nicht ordnungsgemäß formatierte Eingabe problemlos zu einem Pufferüberlauf führen.
swscanf
ist eine Breitzeichenversion von sscanf
. Die Argumente für swscanf
sind Zeichenfolgen mit Breitzeichen. sscanf
behandelt keine Multibyte-Hexadezimalzeichen. swscanf
behandelt keine Hexadezimal- oder "Kompatibilitätszone"-Zeichen in Unicode. Andernfalls verhalten sich swscanf
und sscanf
identisch.
Die Versionen dieser Funktionen mit dem _l
-Suffix sind beinahe identisch, verwenden jedoch den ihnen übergebenen Gebietsschemaparameter anstelle des aktuellen Threadgebietsschemas.
Mapping generischer Textroutinen
TCHAR.H -Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_stscanf |
sscanf |
sscanf |
swscanf |
_stscanf_l |
_sscanf_l |
_sscanf_l |
_swscanf_l |
Anforderungen
Routine | Erforderlicher Header |
---|---|
sscanf , _sscanf_l |
<stdio.h> |
swscanf , _swscanf_l |
<stdio.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
int main( void )
{
char tokenstring[] = "15 12 14...";
char s[81];
char c;
int i;
float fp;
// Input various data from tokenstring:
// max 80 character string:
sscanf( tokenstring, "%80s", s ); // C4996
sscanf( tokenstring, "%c", &c ); // C4996
sscanf( tokenstring, "%d", &i ); // C4996
sscanf( tokenstring, "%f", &fp ); // C4996
// Note: sscanf is deprecated; consider using sscanf_s instead
// Output the data read
printf( "String = %s\n", s );
printf( "Character = %c\n", c );
printf( "Integer: = %d\n", i );
printf( "Real: = %f\n", fp );
}
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
Siehe auch
Stream-E/A
fscanf
, , _fscanf_l
fwscanf
_fwscanf_l
scanf
, , _scanf_l
wscanf
_wscanf_l
sprintf
, , _sprintf_l
swprintf
, , _swprintf_l
__swprintf_l
snprintf
, , _snprintf
_snprintf_l
, , _snwprintf
_snwprintf_l