Programmieren mit C: Probleme mit fscanf?
Hallo! Ich wollte ein Programm schreiben, was Daten aus einer .txt liest und dann verwendet.
Warum funktioniert ein einzelner Aufruf fscanf in einer Schleife, aber nicht zwei Mal wie hier?
Warum kann ich den Aufruf nicht nacheinander ohne Schleife machen? Ich möchte sehr gerne alles in einen Struct speichern..
1 Antwort
Du weißt nicht, wie groß der eingelesene String ist, da provozierst also womöglich einen Overflow, hast auf jeden fall eine Sicherheitslücke.
Zudem solltest du eine Fehlerbehandlung dürchführen falls etwas schiefgeht.
Ob das Ursache deines Problems ist lässt sich nicht sagen, aber es hilft auf jeden Fall bei der Fehlerfindung.
Mehr Informationen findest du z.B. hier:
https://pubs.opengroup.org/onlinepubs/000095399/functions/fscanf.html
Dazu, was welcher fehlercode bedeutet und was die Funktion genau macht.
Gibt auch Funktionen, mit der du zur errno eine passende Fehlermeldung erzeugst oder Funktionen um die Länge der Eingabe zu begrenzen.
Du hast Recht! Ich bin aber noch am Lernen, da konzentriere ich mich erstmal noch um die Grundlagen.
fehlerbehandlung ist eine Grundlage. In C sogar eine der wichtigsten, denn da passieren so leicht fehler und ohne Fehlerbehandlung sind die kaum zu handhaben.
Zudem solltest du schauen, dass du dir beim compilieren einstellst, dass der Compiler pedantisch ist (-pedantic) und dir auch Warnungen wie Fehler behandelt (-Wall -Werror). Gegebenenfalls wäre es auch sinnvoll einen C-Standard festzulegen, den der Compiler verwenden soll (z.B. -std=c11 -D_XOPEN_SOURCE=700).
Zudem sollten Debug-Symbole eingeschaltet sein. Insgesamt:
-std=c11 -pedantic -Wall -Werror -D_XOPEN_SOURCE=700 -g
Sobald ich Arrays aus den Variablen gemacht habe, ging es, obwohl ich es nicht ganz nachvollziehen konnte.
Das ist in C ungünstig. Und mir fallen gerade mehrere Fehler ein, die du gemacht haben könntest.
Konkret: In Structs darf nur das letzte Element eine dynamische Größe haben, der Rest muss eine feste Größe haben.
Wenn du in einem Struct zwei Strings unterbringen möchtest, dann muss mindestens einer davon eine feste Maximalgröße haben.
Ja, stimmt schon.
Habe ich alles, ist für Uni-Aufgaben auf C89 so vorgegeben, deswegen übe ich damit.
Ich wollte ja einen Integer speichern. :o Dann habe ich halt alles zu char gemacht. Irgendwie so. Habe es gerade nicht hier.
Du hast Recht! Ich bin aber noch am Lernen, da konzentriere ich mich erstmal noch um die Grundlagen. ^^"
Ich habe den Fehler tatsächlich an anderer Stelle gefunden, das war doch im Struct. Sobald ich Arrays aus den Variablen gemacht habe, ging es, obwohl ich es nicht ganz nachvollziehen konnte.. Aber es geht. xD