Programmieren mit C: Probleme mit fscanf?

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.


Talbor 
Beitragsersteller
 13.01.2025, 22:40

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

Destranix  14.01.2025, 09:35
@Talbor
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.

Talbor 
Beitragsersteller
 14.01.2025, 14:44
@Destranix

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.

Destranix  14.01.2025, 15:21
@Talbor

Integer und char isr vergleichsweise einfach. Aber sobald du einen String einlesen sollst wird es kompliziert ;-)

Erinnere mich noch, als wir das erste Mal Strings einlesen sollten, das war extremst kompliziert wenn man wollte, dass es nicht kaputt geht.