Erst funktioniert es und jetzt nicht mehr(?)
-
Abend,
ich hatte ein Programm geschrieben, was auch einwandfrei funktioniert hat.
Dann hab ich den Quelltext kopiert, neues Dokument geöffnet reinkopiert, wieder kompiliert und diesmal nicht auf dem Desktop, sondern in einem Ordner gespeichert, aber jetzt funktioniert es nicht mehr.
Vielleicht habe ich nicht alles kopiert, aber ich meine eigentlich schon.
Schaut es euch einfach an:#include <stdio.h> #include <stdlib.h> int main(){ FILE *datei_ptr; char dateiname[67]; int ch; printf("\nWelche Datei wollen Sie lesen?\n>"); gets(dateiname); if ((datei_ptr= fopen(dateiname,"r"))==NULL){ printf("\nFehler beim Oeffnen der Datei!"); } ch=fgetc(datei_ptr); while(!feof(datei_ptr)){ putchar(ch); ch=fgetc(datei_ptr); } printf("\n\nDatei erfolgreich gelesen!\n\n\n\n"); fclose(datei_ptr); system("PAUSE"); return 0; }
-
1. Benutze niemals nie man: gets(3). Die Funktion ist inhärent kaputt!
2. Was bedeutet "geht nicht"?
-
Und ich habe mir die Antwort gerade selber gegeben.
Er sucht also nur nach Dateien in dem Ordner und nicht auf dem gesamten PC.Kann mir einer sagen, wie ich es hinkriege, dass er auf dem ganzen PC sucht?
-
-
@rüdiger
Danke für den Hinweis, aber ich werde es erstmal trotzdem noch benutzen, weil
ich noch am Lernen von C bin.Noch eine Zusatzfrage:
Wozu brauch ich bei dem Programm stdlib.h (es funktioniert ja auch ohne)?
-
volkard schrieb:
rüdiger schrieb:
1. Benutze niemals nie man: gets(3). Die Funktion ist inhärent kaputt!
Warum?
aus man: gets(3):
BUGS
Never use gets(). Because it is impossible to tell without knowing the
data in advance how many characters gets() will read, and because
gets() will continue to store characters past the end of the buffer, it
is extremely dangerous to use. It has been used to break computer
security. Use fgets() instead.
-
Wenn schon, dann so:
while(!feof(datei_ptr)) { ch=fgetc(datei_ptr); putchar(ch); }
ohne
ch=fgetc(datei_ptr);
vor der Schleife, die feof testet.
Außerdem dürfte das letzte Zeichen bei deinem code nie ausgegeben werden. Oder?
Und zudem durchläuft dein Programm auch den restlichen code, wenn das file nicht geüffnet werden konnte...
Just my 2 cents.
-
@EOP
Deine Lösung hat aber das Problem, dass feof erst true liefert, wenn fgetc bereits EOF eingelesen hat. Sprich du gibst das EOF Zeichen aus, bei deiner Lösung.int ch; while( (ch = fgetc(in)) != EOF ) { putchar(ch); }
wäre die bessere Lösung oder gleich lieber ganze Zeilen einlesen und nicht "Tröpfchen für Tröpfchen"
enum { buffer_size = 2048 }; char buffer[buffer_size]; while(fgets(buffer, buffer_size, in)) { fputs(buffer, stdout); }
-
Abgesehen davon, daß ich mich schon seit Jahren nicht mehr mit fget* beschäftigt habe, mag' ich es nicht, wenn andere so sehr recht haben.
Weil ich mir aber unsicher war, hab' ich ja ein "Oder?" angehängt.