Probleme mit fgets(...)
-
bool Liste::LoadFiles(void) { HANDLE fHandle; WIN32_FIND_DATA wfd; fHandle=FindFirstFile("C:\\MeinPfad\\*",&wfd); do { if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) )) { if (strstr(wfd.cFileName,".txt")) { FILE *Datei; Datei = fopen(wfd.cFileName,"r"); char Puffer[100]; char cID[100]; fgets(Puffer,100,Datei); strcpy(cID,Puffer); /*if(Puffer[1] != '0') { if(Kopf == 0) { Kopf = new Pic; Ende = Kopf; Kopf->SetID(StrToInt(cID)); } else { Pic *p = Ende; p->SetNachfolger(new Pic); Ende = p->GetNachfolger(); Ende->SetVorgaenger(p); Ende->SetID(StrToInt(cID)); } }*/ fclose(Datei); } } } while (FindNextFile(fHandle,&wfd)); FindClose(fHandle); return true; }Was ich habe:
Einen Ordner voller Textdateien,die in der ersten Zeile [IrgendeineZahl] zu stehen haben,wie zb [22] oder [34].Was ich möchte:
Zu jeder Textdatei in diesem Ordner ein Objekt erstellen, welche jeder eine andere ID haben.
Die ID's werden aus den Textdateien rausgelesen.Das Problem:
Immer wenn ich das Programm starte,kommt die Fehlermeldung:Debug Assertion Failed!
Program: Pfad vom Programm
File: fgets.c
Line: 60Expression str != NULL
Abbrechen | Wiederholen | Ignorieren
Ich hab in dem Quelltext mit /* */ rausgefiltert,wo der Fehler sicher nicht liegt.
-
Das bedeutet, dass an die Funktion fgets ein FILE-Pointer mit dem Wert NULL übergeben wurde. In Deinem Fall ist wahrscheinlich das fopen schiefgegangen. Du solltest nach dem fopen den Returnwert (hier 'Datei') auf NULL abfragen.
Empfehlung std::ifstream benutzen
std::ifstream datei( dateiname ); int id; if( datei >> id ) // 'id' korrekt gelesenGruß
Werner
-
Das ist sehr eigenartig.
Der Fehler muss wirklich bei fopen passiert sein.
Aber ich verstehe nicht,was da falsch ist.
Ist in wfd.cFileName nur der Dateiname gespeichert oder ist da der ganze Pfad?
EDIT:Ich habs getestet.
Der Fehler lag wirklich daran,dass ich dachte wfd.cFileName würde den ganzen Pfad beinhalten und darum hat fopen nicht gefunzt.