Freigeben über


scanf, , _scanf_lwscanf_wscanf_l

Liest formatierte Daten aus dem Standardeingabestream. Sicherere Versionen dieser Funktionen sind verfügbar; siehe scanf_s, , _scanf_s_l, . _wscanf_s_lwscanf_s

Hinweis

In Visual Studio 2015 wurden die printf Funktionen und scanf die Familie der Funktionen als inline und in die <stdio.h> Kopfzeilen deklariert und <conio.h> verschoben. Wenn Sie älteren Code migrieren, wird möglicherweise linker Error LNK2019 in Verbindung mit diesen Funktionen angezeigt. Weitere Informationen finden Sie unter Visual C++-Änderungsverlauf 2003 - 2015.

Syntax

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 zu verwendende Gebietsschema.

Rückgabewert

Gibt die Anzahl der erfolgreich konvertierten und zugewiesenen Felder zurück. 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.

Wenn format es sich um einen NULL Zeiger handelt, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen EOF zurück und stellen errno auf EINVAL ein.

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

Hinweise

Die scanf-Funktion liest Daten aus dem Standardeingabestream stdin und schreibt die Daten in den Speicherort, der von argument angegeben wird. Jedes argument muss ein Zeiger auf einen Variablentyp sein, der einem Typspezifizierer im format entspricht. Wenn der Kopiervorgang zwischen Zeichenfolgen ausgeführt wird, die sich überschneiden, ist das Verhalten nicht definiert.

Wichtig

Beim Lesen einer Zeichenfolge mit scanf sollten Sie immer einer Breite für das %s-Format angeben (z. B. %32s anstelle von %s). Anderenfalls kann eine nicht richtig formatierte Eingabe leicht einen Pufferüberlauf verursachen. Alternativ können Sie die Verwendung scanf_s, , _scanf_s_l, , wscanf_soder _wscanf_s_lfgets.

wscanf ist eine Breitzeichenversion von scanf. Das format -Argument für wscanf ist eine Breitzeichenfolge. wscanf und scanf verhalten sich identisch, wenn der Stream in ANSI-Modus geöffnet ist. scanf unterstützt derzeit nicht die Eingabe aus einem UNICODE-Stream.

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
_tscanf scanf scanf wscanf
_tscanf_l _scanf_l _scanf_l _wscanf_l

Weitere Informationen finden Sie unter "Formatspezifikationsfelder: scanf und wscanf Funktionen".

Anforderungen

Routine Erforderlicher Header
scanf, _scanf_l <stdio.h>
wscanf, _wscanf_l <stdio.h> oder <wchar.h>

Die Konsole wird in UWP-Apps (Universelle Windows-Plattform) nicht unterstützt. Die mit der Konsole verknüpften Standardstreamhandles stdin, stdout und stderr müssen umgeleitet werden, bevor sie von C-Laufzeitfunktionen in UWP-Apps verwendet werden können. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

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);
}
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

Siehe auch

Mathematische Unterstützung und Gleitkommaunterstützung
Stream-E/A
Gebietsschema
fscanf, , _fscanf_lfwscanf_fwscanf_l
printf, , _printf_lwprintf_wprintf_l
sprintf, , _sprintf_lswprintf, , _swprintf_l__swprintf_l
sscanf, , _sscanf_lswscanf_swscanf_l