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_lswscanf_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 Formatspezifikationssyntax.

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 EINVALfest.

Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

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.

Generische Textroutinzuordnungen

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