Datei einlesen
-
hallo Leute, ich programmiere seit 3 Tagen C und verstehe nihct wo der Fehler in meinem Code liegt:
int main(int argc, char **argv) { char buffer[BUFFSIZE]; char filename[BUFFSIZE]; int c; printf("Dateipfad \n"); fgets(filename, BUFFSIZE, stdin); FILE *file; [code]printf("%s",filename);
file = fopen(filename, "r");
if(file != NULL) {
while((c = fgetc(file)) != EOF) {
putchar(c);
}
} else {
printf("Falscher Dateiname");
return 1;
}
getcwd(buffer, BUFFSIZE);
printf("Das Aktuelle Verzeichniss: \n %s \n", buffer );
return 0;
}[/code]wenn ich "liste.txt" eingebe ist file == null , wenn ich allerdings einfach nur
file = fopen("liste.txt", "r");
sage dann klappts?!?!
printf("%s",filename);
gibt auch das zurpück was ich eingegeben habe.
was mache ich falsch??
-
Wenn du mit fgets Strings einliest, wird das abschließende NextLine-Symbol
('\n') mit innerhalb des String gespeichert. Dieses Zeichen mag aber fopen
nicht.Also musst du ungültige Zeichen aus dem String entfernen.
Gruß mcr
Hier mal eine verbesserte Version:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define BUFFSIZE 1024 static void rm_next_line(char *s) { if (!s) return; while (*s) { if (*s == '\n') { *s = 0; return; } s++; } } int main(void) { char buffer[BUFFSIZE]; char filename[BUFFSIZE]; FILE *file; int c; printf("Dateipfad \n"); fgets(filename, BUFFSIZE, stdin); rm_next_line(filename); printf("%s\n",filename); file = fopen(filename, "r"); if(file != NULL) { while((c = fgetc(file)) != EOF) { putchar(c); } } else { printf("Falscher Dateiname\n"); return 1; } getcwd(buffer, BUFFSIZE); printf("Das Aktuelle Verzeichniss: \n %s \n", buffer ); return 0; }
-
hui, es klappt, vielen Dank