Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
[C++] Konsole als Konfigurationsdialog - Problem mit fscanf
Moin Moin
Ich hab für mein Spiel eine kleine Auswahlsfunktion für Grafiktreiber, Auflösung und Volbildmodus (->Irrlicht) geschrieben. Es fragt nur die Daten ab oder liest sie, wenn möglich, aus einer Datei. Dabei verwende ich eine Variable
C-/C++-Quelltext
1
char i;
Im Debug-Modus erhalte ich einen Fehler, von wegen "stack around the variable was corrupted":
Liegt es an fscanf?
Weiß jemand warum der Fehler auftritt?
Im Debug-Modus kann man ihn noch "wegklicken", bei Release hängt sich das Programm auf.
Schon mal Danke im Voraus,
mfg DoubleM
[Edit:] Das Bild ist jetzt auch da
[Edit 2:] Im Debug-Modus meldet er den Fehler erst am Ende der Methode, bei der geschweiften Klammer, und das kann ja irgendwie nicht sein *am Hinterkopf kratz*
Mein Tipp: nutz den irrlicht xmlwriter/reader oder nimm fstream. Weil da kannst du einfach >> bzw << nutzen.
Zum Problem: %c und ohne & ist für einzelne char. Oder du nutzt ein char i[10] o.ä.
Nee, ohne & funktioniert es nicht, anfangs wollte ich es auch weglassen, nur zu Laufzeit hat er sich dann ziemlich verheddert.
Und bei %c kommt eine Speicherzugriffsverletzung.
Werde ich es wohl mit etwas anderem versuchen (fstream...)
TrikkieMikkie hat das Problem schon richtig lokalisiert. Allerdings liegts net an dem &. Du liest hier nen string in einen char ein. Das geht natürlich nicht (außer der string ist leer). Entweder %c verwenden (wenn du eigentlich nur ein zeichen lesen wolltest) oder richtig mit buffer usw. (dann könntest du aber auch gleich fgets() verwenden statt fscanf()) oder statt dem C Kram C++ string und streams verwenden...
Das, was am meisten ärgerlich war, war, dass es anfangs nicht funktioniert hatte, weil die Speicher-Funktion mit fstream fehlerhaft war :? (Toller Satz :lol: )
Willst du nicht gleich ganz von den C-Funktionen wegkommen, für die es entsprechend bessere Alternativen in C++ gibt? Oder welchen Grund hast du, dass du printf() statt std::cout verwendest?
Ausserdem brauchst du Variablen nicht zu "leeren", bevor du sie neu beschreibst. Stattdessen solltest du lieber eine Gültigkeitsprüfung einbauen...
Ausserdem brauchst du Variablen nicht zu "leeren", bevor du sie neu beschreibst. Stattdessen solltest du lieber eine Gültigkeitsprüfung einbauen...
Ist ein Überbleibsel davon, dass er immer "verhunzte" Variablen geladen hat. Um alle Fälle auszuschließen hatte ich diese Variablenleerung hingeschrieben, mitlerweile weiß ich, dass die Variablen beim Speichern "verhunzt" wurden.