scanf, _scanf_l, wscanf, _wscanf_l
Lesen formatierte Daten im Standardeingabestream.Sicherere Versionen dieser Funktion verfügbar sind; finden Sie unter scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.
int scanf( const char *format [, argument]... ); int _scanf_l( const char *format, locale_t locale [, argument]... ); int wscanf( const wchar_t *format [, argument]... ); int _wscanf_l( const wchar_t *format, locale_t locale [, argument]... );
Parameter
format
Formatsteuerzeichenfolge.argument
Optionale Argumente.locale
Das Gebietsschema zu verwenden.
Rückgabewert
Gibt die Anzahl der erfolgreich konvertierten und zugewiesenen Feldern zurück; der Rückgabewert umfasst keine Felder, die gelesen wurden, jedoch nicht zugewiesen.Ein Rückgabewert 0 gibt an, dass keine Felder zugewiesen wurden.
Wenn format ein NULL Zeiger ist, ist der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, geben diese Funktionen EOF zurück und legen errno auf EINVAL fest.
Weitere Informationen über diese und andere Fehlercodes, finden Sie unter _doserrno, errno, _sys_errlist und _sys_nerr.
Hinweise
Die scanf-Funktion liest Daten im Standardeingabestream stdin und schreibt die Daten in den Speicherort, der für argument angegeben ist.Jedes argument muss ein Zeiger auf eine Variable eines Typs handeln, der zu einem Typspezifizierer in format entspricht.Wenn das Kopieren zwischen Zeichenfolgen stattfindet, die sich überschneiden, wird das Verhalten nicht definiert.
Sicherheitshinweis |
---|
Wenn Sie eine Zeichenfolge mit scanf lesen, sollten Sie immer eine Breite für das %s Format an (beispielsweise, "%32s" anstelle "%s"); andernfalls kann nicht ordnungsgemäß formatierte Eingabe einen Pufferüberlauf kommen.Alternativ sollten Sie mithilfe scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l oder fgets. |
wscanf ist eine Breitzeichen-Version von scanf; format das Argument an wscanf ist eine Zeichenfolge mit Breitzeichen.wscanf und scanf verhalten sich identisch, wenn der Stream in ANSI-Modus geöffnet ist.scanf nicht unterstützt Eingaben von einem UNICODE-Stream.
Die Versionen dieser Funktionen mit dem _l Suffix sind identisch, allerdings verwenden den Gebietsschemaparameter in, der anstelle des aktuellen Threadgebietsschemas übergeben wird.
Zuordnung generische Textroutinen
TCHAR.H-Routine |
_UNICODE & _MBCS nicht definiert. |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Weitere Informationen finden Sie unter Formatangaben-Felder - scanf Funktionen und wscanf Funktionen.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
scanf, _scanf_l |
<stdio.h> |
wscanf, _wscanf_l |
<stdio.h> oder <wchar.h> |
Die Konsole wird nicht in Windows Store-App unterstützt.Die Standardstreamhandles, die mit der Konsole, stdin, stdout und stderr zugeordnet werden, müssen umgeleitet werden, bevor sie C-Laufzeitfunktionen in Windows Store-App verwenden können.So zusätzlicher Kompatibilitätsinformation finden Sie unter Kompatibilität in der Einführung.
Beispiel
// crt_scanf.c
// compile with: /W3
/* This program uses the scanf and wscanf functions
* to read formatted input.
*/
#include <stdio.h>
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996
// Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_s
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
.NET Framework-Entsprechung
Siehe auch Parse-Methoden, z System::Double::Parse.
Siehe auch
Referenz
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l