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


Anmelden zum Antworten