Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Liest formatierte Daten aus einer Zeichenfolge. Diese Versionen von sscanf, _sscanf_l, swscanf_swscanf_l haben Sicherheitsverbesserungen, wie in den Sicherheitsfeatures in der CRT beschrieben.
Syntax
int sscanf_s(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_s_l(
const char *buffer,
const char *format,
_locale_t locale [,
argument ] ...
);
int swscanf_s(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_s_l(
const wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument ] ...
);
Parameter
buffer
Gespeicherte Daten
format
Formatsteuerzeichenfolge. Weitere Informationen finden Sie unter "Formatspezifikationsfelder: scanf und wscanf Funktionen".
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.
Informationen zu diesen und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno
Hinweise
Die sscanf_s-Funktion liest Daten aus buffer in den Speicherort, der durch das jeweilige argument angegeben wird. Die Argumente nach der Formatzeichenfolge geben Zeiger zu den Variablen an, die einen Typ haben, der einem Typspezifizierer in format entspricht. Im Gegensatz zu den weniger sicheren sscanf-Versionen ist bei der Verwendung der Typfeldzeichen c, C, s, S oder von in [] enthaltenen Zeichenfolgensteuerungssätzen ein Puffergrößenparameter erforderlich. Die Puffergröße in Zeichen muss unmittelbar nach jedem Pufferparameter, der erforderlich ist, als zusätzlicher Parameter angegeben werden. Wenn Sie beispielsweise in eine Zeichenfolge lesen, wird die Puffergröße für diese Zeichenfolge wie folgt übergeben:
wchar_t ws[10];
swscanf_s(in_str, L"%9s", ws, (unsigned)_countof(ws)); // buffer size is 10, width specification is 9
Die Puffergröße enthält das abschließende NULL-Zeichen. Ein Feld für die Breitenangabe muss verwendet werden, um sicherzustellen, dass das eingelesene Token in den Puffer passt. Wenn kein Feld für die Breiteangabe verwendet wird und das Tokenlesefeld zu groß ist, um in den Puffer zu passen, wird nichts in diesen Puffer geschrieben.
Ein einzelnes Zeichen kann wie folgt gelesen werden:
wchar_t wc;
swscanf_s(in_str, L"%c", &wc, 1);
In diesem Beispiel wird ein einzelnes Zeichen aus der Eingabezeichenfolge gelesen und dann in einem Breitzeichenpuffer gespeichert. Wenn mehrere Zeichen für Zeichenfolgen gelesen werden, die nicht mit NULL abschließen, werden ganze Zahlen ohne Vorzeichen für die Breitenangabe und die Puffergröße verwendet.
char c[4];
sscanf_s(input, "%4c", &c, (unsigned)_countof(c)); // not null terminated
Weitere Informationen finden Sie unter scanf_s, , wscanf_s_scanf_s_lund _wscanf_s_lscanf geben Sie Feldzeichen ein.
Hinweis
Der Größenparameter ist vom Typ unsigned und nicht vom Typ size_t. Wenn Sie für 64-Bit-Ziele kompilieren, verwenden Sie eine statische Umwandlung, um _countof- oder sizeof-Ergebnisse in die korrekte Größe zu konvertieren.
Das format-Argument steuert die Interpretation der Eingabefelder und hat die gleiche Form und Funktion wie das format-Argument für die scanf_s-Funktion. Wenn der Kopiervorgang zwischen Zeichenfolgen ausgeführt wird, die sich überschneiden, ist das Verhalten nicht definiert.
swscanf_s ist eine Breitzeichenversion von sscanf_s. Die Argumente für swscanf_s sind Zeichenfolgen mit Breitzeichen. sscanf_s behandelt keine Multibyte-Hexadezimalzeichen. swscanf_s behandelt keine Hexadezimal- oder "Kompatibilitätszone"-Zeichen in Unicode. Andernfalls verhalten sich swscanf_s und sscanf_s identisch.
Die Versionen dieser Funktionen mit dem _l-Suffix sind beinahe identisch, verwenden jedoch den Gebietsschemaparameter, der anstelle des aktuellen Threadgebietsschemas übergeben wurde.
Mapping generischer Textroutinen
TCHAR.H-Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
|---|---|---|---|
_stscanf_s |
sscanf_s |
sscanf_s |
swscanf_s |
_stscanf_s_l |
_sscanf_s_l |
_sscanf_s_l |
_swscanf_s_l |
Anforderungen
| Routine | Erforderlicher Header |
|---|---|
sscanf_s, _sscanf_s_l |
<stdio.h> |
swscanf_s, _swscanf_s_l |
<stdio.h> oder <wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_sscanf_s.c
// This program uses sscanf_s to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdlib.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 plus null terminator
sscanf_s( tokenstring, "%s", s, (unsigned)_countof(s) );
sscanf_s( tokenstring, "%c", &c, (unsigned)sizeof(char) );
sscanf_s( tokenstring, "%d", &i );
sscanf_s( tokenstring, "%f", &fp );
// Output the data read
printf_s( "String = %s\n", s );
printf_s( "Character = %c\n", c );
printf_s( "Integer: = %d\n", i );
printf_s( "Real: = %f\n", fp );
}
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
Siehe auch
Stream-E/A
fscanf, , _fscanf_lfwscanf_fwscanf_l
scanf, , _scanf_lwscanf_wscanf_l
sprintf, , _sprintf_lswprintf, , _swprintf_l__swprintf_l
snprintf, , _snprintf_snprintf_l, , _snwprintf_snwprintf_l