Archiv verlassen und diese Seite im Standarddesign anzeigen : [c/c++] FILE pointer macht Probleme
Hallo erstmal!
ich will daten aus einer datei.txt lesen, und das geht wunderbar (wenn ich das ganze einlese).
währen des lesen will ich ja aber manchmal eine zeile überspringen bzw. noch mal lesen:
FILE *fd;
fopen(........);
fscan(.....);
//zeile überspringen
//hier mache ich
fd++;
//und dann
fscan(.....);
//und dann eine nochmal lesen.
fd--;
fscan(...);
GCC compeiliert ohne fehler!
beim ausführen gibt´s speicherzugriffsfehler!!
PROBLEM KOMMT von dem fd++ (ich habe es überprüft)
PS: Ich will ja gern wissen warum der FILE POINTER probleme macht;
Wie kommst du darauf dass du mit dem inkrementieren des FILE-Zeigers eine Zeile ueberspringen kannst? ;)
So geht das nicht. Du musst dir ggf. selber eine Routine schreiben die bis zum naechsten \n geht, bzw. eins darueber.
Auf die Idee komme ich aus PHP
und was ist mit zeile noch mal lesen
C ist halt kein PHP.
Wenn du mal in /usr/include/stdio.h guckst siehst du dass FILE ein typedef auf struct _IO_FILE ist. _IO_FILE ist eine structure in libio.h. (bei mir zumindest)
Mit dem inkrementieren des Pointers bewirkst du, dass dein Zeiger auf einen anderen Speicher zeigt. Schlimmstenfalls irgendwo wo er nicht kann und dann bekommst du Zugriffsverletzungen bzw. Segmentation faults.
Aendere also nicht einfach so den FILE-Zeiger, ausser du oeffnest eine neue Datei.
Um eine Zeile wieder neu einzulesen musst du rueckwaerts gehen. Rueckwaerts kannst du z.B. mit der Funktion fseek gehen. Siehe dazu man fseek. Dabei wuerde sich anbieten hier auch eine Routine zu schreiben, die eine Zeile rueckwaerts geht bis zum \n.
Ich beziehe mich hier auf ANSI-C.
Evtl. waere es einfacher C++ zu verwenden (File streams), aber da bin ich nicht so in der Standard Library drin.
THX
ich werde es versuchen
währen des lesen will ich ja aber manchmal eine zeile überspringen bzw. noch mal lesen
Hast du fgets schon mal probiert?
Und wenn du die Zeile 2x brauchst, siehst du dir einfach den Puffer an, in den du fgets hast schreiben lassen.
Zu dem Speicherfehler hast du ja schon die Antwort von chritzel
so long
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.