====== fscanf() ====== ''fscanf()'' ist in der ''[[c:lib:stdio:start|stdio]]'' definiert, die in C über ''stdio.h'', bzw in C++ über ''cstdio'' eingebunden wird. ===== Funktion ===== ''fscanf()'' wird dazu verwendet, um einen String zu interpretieren und in Variablen abzulegen, wie es über einen [[FormatString]] beschrieben ist. ===== Signatur ===== #include int fscanf( FILE * file, char const * formatString, ... ); **file**: Datenstream, aus dem der zu interpretierende String gelesen wird. \\ **formatString**: [[Formatstring]], der beschreibt, wie der zu parsende String zusammengesetzt ist \\ **...**: Eine Anzahl von Argumenten, entsprechend des Formatstrings \\ \\ **Return Value**: Die Länge der geparsten Zeichen aus dem Eingabestring. ===== Fehlerquellen ===== Der Eingabestring muss dem Formatstring entsprechen. ''fscanf()'' liest aus einer Datei, die oft Aufgrund von Eingaben des Benutzers erstellt wird. Gibt der Benutzer die Daten nicht genau in dem Format ein wie es dem Formatstring entspricht, führt dies zu willkürlichen Ergebnissen. Da der Entwickler den Benutzer nicht kontrollieren kann, darf man nicht davon ausgehen, dass die Eingaben einen Sinn ergeben. Entsprechend gefährlich ist die Verwendung von ''fscanf()''. Im nachfolgenden Beispiel wird ein String eingelesen, ist dieser String länger als der Zwischenspeicher, so kann das Programm abstürzen. Weiterhin darf der String keine Leerzeichen enthalten, da diese ein Trennsymbol zwischen mehreren Strings darstellt. Für String-Eingaben sollte entweder [[fgets()]], eine [[gui:start|GUI]] oder [[c:func:main:parameter|Parameter]] verwendet werden. ===== Beispiel ===== #include #include int main() { int i = 0; char string[256]; FILE * file = fopen( "datei.txt", "r" ); if( file ) { fscanf( file, "%s", &string[0] ); // Adresse des ersten Buchstabens fscanf( file, "%i", &i ); // Adresse von i printf( "String gelesen: %s\n", string ); printf( "Integer gelesen: %d\n", i ); } return EXIT_SUCCESS; } Um die benötigte Datei zu erzeugen schreiben wir "proggen.org 42" in die Datei "datei.txt": $ echo "proggen.org 42" > datei.txt **Ausgabe**: String gelesen: proggen.org Integer gelesen: 42 ===== siehe auch ===== [[c:lib:stdio:start|stdio]]: [[c:lib:stdio:scanf()]], [[c:lib:stdio:vscanf()]], [[c:lib:stdio:vfscanf()]], [[c:lib:stdio:sscanf()]], [[c:lib:stdio:gets()]], [[c:lib:stdio:fread()]]