fopen
-
Hab mal eine ganz kurze Frage zu fopen wie bereits im Titel erwähnt:
ich hab mal Probeweise ein Programm geschrieben, dass eine Textdatei einliest und auf die Konsole ausgeben soll. Hier mein Quelltext:
#include <stdio.h> #include <stdlib.h> int main(int argc, char * argv[]) { FILE *MeinHandle; char* MeineZeile; char* Dateiname; Dateiname="C:\Schule\AINF\Eclipse Helios\eclipse\WS1\Caesar_modifiziert"; MeinHandle = fopen(Dateiname, "r"); while ( fgets(MeineZeile, 1024, MeinHandle)!= NULL){ printf(MeineZeile); } fclose(MeinHandle); return 0; }
Ich bin mir nicht mal sicher ob das mit dem Dokumentenpfad stimmt wie ich das mache.
Bräuchte eine leicht verständliche Antwort
Vorab schon mal danke
-
Mach dich mal schlau über Escapesequenzen bei printf (Zeilenvorschub und so).
fopen gibt NULL zurück wenns schief geht.Dateiname="C:\\Schule\\AINF\\Eclipse Helios\\eclipse\\WS1\\Caesar_modifiziert"; printf("%s\n",Dateiname); // Hier hättest du den Fehler gesehen if(MeinHandle = fopen(Dateiname, "r") == NULL) return(-1);
Und bei fgets solltest du auf EOF und nicht auf NULL testen.
Benutze dazu mal die Suchfunktion.
-
Probier es mal so:
Dateiname="C:\\Schule\\AINF\\Eclipse Helios\\eclipse\\WS1\\Caesar_modifiziert"; }
Ein Backslash in einem String leitet immer eine Escapesequenz ein (du kennst vielleicht '\n' oder '\r'). Du dürftest bei deinem Code Warnungen erhalten haben (z.B. "nicht erkannte Escape-Sequenz '\s' oder so). Wenn du nun wirklich einen Backslash in deinem String ablegen willst, musst du das per '\' machen (in den String wird dann ein einfacher Backslash gelegt und kein doppelter, wie oft von Anfängern angenommen).
-
Dir fehlt Speicher für den Zeilenpuffer. Statt
char* MeineZeile;
sollte es heissen:
char MeineZeile[1024];
-
vielen dank für die schnelle Hilfe (der letzte Beitrag hat dann noch den entscheidenden Hinweis geliefert)
-
Windows hat übrigens kein Problem mit einem Slash "/", den musst du auch nicht extra kennzeichnen. Darüber freuen sich dann auch andere Systeme, die da nicht so tolerant sind.
P.S. Das soll keine Abwertung von *nix-artigen Systemen sein, technisch hat die strikte Trennung durchaus ihren Vorteil. Aber für den Menschen sind Features wie das ignorieren von Groß- und Kleinschreibung verständlicher.