.| Autor | Beitrag |
|---|---|
|
000 28.05.2002, 16:35 Sccar |
moin ich versuche eine kleine configdatei mit zwei zeile mit fopen zu öffnen. wenn ich das programm ganz normal ausführe stürzt es bei fopen(file, "rt") ab. wenn ich es mit msvc++ im debugmodus ausführe, liefert mit der funktionsaufruf einen NULL-pointer zurück. woran könnte das liegen? [code] filein = fopen(file, "rt"); if(filein == NULL) readstr(filein, oneline); readstr(filein, oneline); fclose(filein); thx ...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron} |
|
Profil || Suche |
|
001 28.05.2002, 16:49 [RMen]OneStone |
vielleicht noch ein if(file == 0) return false; an den Anfang. [edit]Woher weisst du so genau, das der Absturz beim fopen passiert?[/edit] --georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/ Dieser Beitrag wurde am 28.05.2002 um 16:59 von [RMen]OneStone bearbeitet. |
|
Profil || Suche |
|
002 28.05.2002, 16:54 Sccar |
jo ok, daran kann aber der konkrete programmabsturz net liegen. --...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron} |
|
Profil || Suche |
|
003 28.05.2002, 18:37 dp Administrator |
für was steht denn das 't' in "rt" ? -- |
|
Profil || Suche |
|
004 28.05.2002, 18:52 TheTinySteini |
t steht für Textmode. Praktisch das Pendant zu "b" für binary Mode. Welcher Modus Standart ist, steht laut MSDN in der Variable _fmode. Zum Problem: hast du überprüft, ob der Dateiname korrekt übergeben wird? Probier auch mal ohne das "t" - und wie schon OneStone meinte, woher weißt du, dass es genau bei fopen crasht? --TheTinySteini |
|
Profil || Suche |
|
005 28.05.2002, 19:57 Leviathan |
wie äußert sich denn der absturz? gibt es denn die datei, die du öffnen willst überhaupt? wenn nein ist fopen("datei_die_nicht_existiert","r")==NULL (ist so definiert) weitere typische fehler bei diesem problem: kleine anmerkung: für Entities: HL | HL² |
|
Profil || Suche |
|
006 28.05.2002, 20:02 Archangel |
readstr(filein, oneline); readstr(filein, oneline); ganz sicher dass das nich: ... heißen muss ? :D -- |
|
Profil || Suche |
|
007 28.05.2002, 20:39 Leviathan |
achja, hab ich eben vergessen: ich weiss, dass sscanf ein scanf aus strings ist und dass man mit scanf("%s",string) einen string von stdin in die char * string -variable einliest (für die natürlich vorher speicehrplatz reserviert wurde), aber was soll der rest da? und @ archangel: das ist richtig so wie ich es kopiert habe, bei strings im char * -format (also strings wie sie in c waren) brauchst du keinen addressoperator, da die sowieso schon pointer sind. würde er einen int oder einen double einlesen hättest du recht. --Entities: HL | HL² |
|
Profil || Suche |
|
008 28.05.2002, 21:51 dp Administrator |
ah, text, wusste garnicht dass es das gibt. dachte das ist automatisch text wenn man nicht explizit b angibt.. -- |
|
Profil || Suche |
|
009 28.05.2002, 21:57 Mazze |
ich geb da immer "a" (ascii) ein... Übrigens hat Leviathan schon recht mit den char* s --BattleTech-MOD: |
|
Profil || Suche |
|
010 29.05.2002, 13:41 Archangel |
ack, stimmt ja, sind ja char-pointers... wieso eigtl ? is doch unsinnig... -- |
|
Profil || Suche |
|
011 29.05.2002, 14:13 Sccar |
also, der dateinmae wird richtig übergeben, die datei ist ebenfalls in dem entsprechenden ordner (in dem gleichen wie das proggie) enthalten. ich weiß, das es bei fopen crasht, da ich das mit nem debug geprüft habe. das interessante ist wie gesagt, dass der nur beim normalen programmablauf ohne debug abstürzt, beim debug hingegen liefert fopen an dieser stelle nur ein NULL (also fehler). @Leviathan ich schreibe in die cfg dann z.B: SCREEN_WIDTH: 640 dadurch ist die cfg einfacher zu verstehen. sscanf "ignoriert" durch diese code sozusagen das SCREEN_WIDTH: und liest nur das 640 ein. d.h ich muss das net umständlich selber rauspuhlen =). was meinst du mit - dateinamen müssen mit doppelbackslash geschrieben werden, wenn sie als konstanten im programm vorliegen (\ sagt das er zusammen mit folgendem zeichen ein steuerzeichen ist, z.b. \n) gib bitte mal ein beispiel. thx alle sccar --...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron} |
|
Profil || Suche |
|
012 29.05.2002, 14:24 TheTinySteini |
Nope, wenn du c:\windows\test.txt haben willst, musst du c:\\windows\\test.txt schreiben - gilt also nur für backslashes. forward slashes sollten aber auch funktionieren. Mazze: "a" is append, nicht ascii! TheTinySteini |
|
Profil || Suche |
|
013 29.05.2002, 14:29 Sccar |
@ttt: die cfg liegt in dem debug unterordner, wo sie auch liegen muss (bei anderen sachen hats geklappt). tut es vielleicht was zur sache, das ich in dem projekt sdl benutze? sccar --...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron} |
|
Profil || Suche |
|
014 29.05.2002, 15:53 [RMen]OneStone |
Du kannst nicht wissen, ob es ausserhalb des Debug's auch bei fopen hakt, es sei denn, du machst ein __asm int 3 rein! --georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/ |
|
Profil || Suche |
|
015 29.05.2002, 17:22 Sccar |
hast recht. ich hab deswegen mal debug ausgaben hinzugefügt. aber es liegt definitiv an dem fopen. hmm :(( sccar --...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron} |
|
Profil || Suche |
|
016 30.05.2002, 01:02 dp Administrator |
wenns wider erwarten doch nicht am fopen liegt guck doch mal ob cfg->screen_width nen null pointer ist oder sonstwelchen kram enthält ausser das was er sollte .. -- |
|
Profil || Suche |
|
017 30.05.2002, 02:19 Leviathan |
@archangel: char * sind strings weil strings ein array mit char-elementen sind, und arrays sind in c / c++ nunmal zeiger auf das 0. element des strings, dadurch ist auch zugriff über pointeraritmetik möglich. @scarr: die datei liegt im debug-unterordner? wenn du das programm aber über ausführen aus der entwicklungsumgebung startest ist der aktuelle ordner der projektordner, nicht der debugordner.gib dir doch einfach mal den dateinamen aus bevor du öffnest, das könnte einiges klären. wenn es gar nicht mit fopen funktioniert probier es mal mit der ifstream-klasse aus der stl, damit solle man alles machen können was mit fopen und den "f-funktionen" auch geht. und was ist eigentlich sdl? meinst du vielleicht stl, standart template library noch eine kleine anmerkung: du solltest dir angewöhnen, zeiger bei der definition direkt mit NULL zu belegen, das hilft fehler zu vermeiden. und das mit dem fopen kann man leicht überprüfen, kommentiere es einfach aus und führe das programm einmal aus, gibt es dann den gleichen fehler wie vorher lag es wahrscheinlich nicht an dem fopen. --Entities: HL | HL² |
|
Profil || Suche |
|
018 30.05.2002, 12:44 Mazze |
er meint wohl eher Simple Directmedia Layer BattleTech-MOD: |
|
Profil || Suche |
|
019 30.05.2002, 15:38 Archangel |
@archangel: char * sind strings weil strings ein array mit char-elementen sind, und arrays sind in c / c++ nunmal zeiger auf das 0. element des strings, dadurch ist auch zugriff über pointeraritmetik möglich. hab ich danach gefragt ? ich weiß, was char-pointer sind.. Dieser Beitrag wurde am 30.05.2002 um 15:39 von Archangel bearbeitet. |
|
Profil || Suche |
|
020 30.05.2002, 16:01 Leviathan |
@archangel: eigentilich dachte ich schon, dass du danach gefragt hast, ist jetzt aber auch egal. wenn er als int speiechrn möchte, müsste er Entities: HL | HL² |
|
Profil || Suche |
|
021 30.05.2002, 18:00 Sccar |
hmm, okay, danke für die vielen tips. ich habs jetzt mit ifstream gemacht, und siehe da, es funktioniert. kein plan warums es vorher nicht getan hat. den fehler mit dem %s hab ich auch (schon =) behoben. naja, das war eins dieser probs, die man wahrscheinlich nie lösen wird (windows ?!??). trotzdem danke für die hilfe. sccar --...das is zwar der uebelst gehackteste kleine bastard, den ich je gesehen habe, aber dafuer sauschnell. {Tron} |
|
Profil || Suche |

