fseek.c Linie:100
-
guten morgen alle...
also ich bin neu hier und möchte 1. mal sagen das diese site genial ist! nur, dass 2. die suche nicht bei meinem FireFox funktioniert.3.ich bin von php nach c gewandert und noch nicht soo trainiert in C...
nun habe ich ein problem(chen)...
und zwar möchte ich ein file zeile für zeile auslesen.char temp[255]; stream2=fopen("temp.txt","r"); // Öffnen von temp Files unsigned long numChars; //Variable für Anz. Chars fseek(stream2,0,SEEK_END); //Zeiger, spring ans Ende numChars=ftell(stream2); // Var bekommt Anz. Chars des Files fseek(stream2,0,SEEK_SET); // Zeiger, spring zum Anfang while(ftell(stream2) != numChars) // Solange Zeiger nicht am ende { fgets(temp,255,stream2); //speicher die zeile in temp[255] fputs(temp,stdout); // temp[255] ausgeben printf("\t"); // Tabulator dazwischen } fclose(stream2); //schliesse stream
Nun kommt ein fehler in dem file fseek.c linie 100
benutze den MS Visual Studio 2005
-
Erstmal benötigst du vermutlich die Größenberechnung gar nicht - stattdessen kannst du per man: feof testen, ob du am Ende angekommen bist. Und zweitens benötigt man: fputs ein '\0' am Ende des Strings, sonst schreibt es dir den Inhalt des Speichers raus, bis es zufällig eins findet.
PS: Wie lautet denn die genaue Fehlermeldung? Dein Compiler wird doch sicher mehr sagen als "da ist ein Fehler".
-
Ich bins, DrainDraftXT... warte noch auf Email mit aktivierungscode...
Also der Fehler ist wie folgt:
Debug Assertion Failed!
Program: ...
File: fseek.c
Line: 100Expression: (stream != NULL)
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.(Press Retry to debug the application)
Zum Programm: es ist eine art suche, die ein system(DIR /B >> temp.txt) macht.
-
Expression: (stream != NULL)
Ich würde sagen, das ist der Fehler - der übergebene FILE* darf nicht NULL sein. Und fopen() gibt NULL zurück, wenn das öffnen gescheitert ist, d.h. du solltest vor der Weiterarbeit überprüfen, ob's geklappt hat.
(fopen() könnte z.B. scheitern, weil die Datei noch nicht existiert oder weil du nicht ausreichend Rechte für die Datei hast)
-
ok.. gut dann werd ich wohl n fclose() vergessen haben...
und das mit feof() wäre wohlwhile(feof(stream2)!=NULL)
nur das mit dem '\0' kapiere ich net ganz.
muss ich dann zum fgets ein strcat(fgets(),'\0') hinzufügen?
-
Die EOF-Abfrage lautet korrekt:
while(!feof(stream2)) ...
Und was das '\0' angeht, muß ich meine Aussage korrigieren - man: fgets kümmert sich doch selber darum, daß der String sauber abgeschlossen wird. (sorry, das kann vorkommen - ich bin eher C++-belastet)
PS: Muß es unbedingt C Sein? In C++ ist die Dateiverarbeitung wesentlich eleganter (finde ich).
-
Danke vielmals für die schnelle Antwort
PS: Hmm also ich dachte, zuerst lerne ich mal C um dann auf C++ umzusteigen.
In der Schule haben wir eben vor einigen Monaten mit C angefangen. Nun wollte ich noch einwenig "weiterforschen" und dann auf C++ umsteigen.
-
Skelter schrieb:
Danke vielmals für die schnelle Antwort
PS: Hmm also ich dachte, zuerst lerne ich mal C um dann auf C++ umzusteigen.
In der Schule haben wir eben vor einigen Monaten mit C angefangen. Nun wollte ich noch einwenig "weiterforschen" und dann auf C++ umsteigen.Da du von PHP kommst, welches auch Klassen beherrscht, solltest du gleich auf C++ umsteigen. So hast du nur eine Umstellung. Von PHP auf C auf C++ hast du gleich zwei Umstellungen und Dinge, welche du in C gelernt und angewandt hast, werden in C++ anders gelöst (auch wenn in C++ noch C verwendbar ist).