2016-04-10 8 views
-1

Ich habe an einem Programm gearbeitet und ich muss eine TXT-Datei lesen. jedoch der Name der Datei geöffnet werden soll, muss vom Anwender festgelegt werden: „Datei konnte nicht geöffnet werden“Wie verwendet man ein String-Array als TXT-Dateiname in fopen in C

#include stdio.h  

int main(void) { 
    char FN[30]; 

    FILE *Fptr; 

    printf("%s","Enter the full path of the file you wish to open.\n"); 
    scanf("%s",FN); 
    if ((Fptr=fopen(FN,"r+"))==NULL) { 
     printf("%s","File could not be opened.\n"); 
    } else { 
     printf("%s","File opened successfully.\n"); 
    } 
} 

Ich bekomme immer wieder die Meldung Ich denke, das Problem irgendwie in der Anordnung sein muß ich als Dateinamen verwenden, weil, wenn ich versuche:

if ((Fptr=fopen("/Volumes/NO NAME/IntroProgramming/Version-0/test.txt","r+"))==NULL) 

statt:

if ((Fptr=fopen(FN,"r+"))==NULL) 

das Programm funktioniert ganz gut.

+4

Wissen Sie, was die '30' in' char FN [30]; bedeutet? – juanchopanza

+1

Juan sagt, dass Ihr Puffer zu klein ist. Ihr Beispielpfad hat 53 Länge – VladimirS

+1

Die Fehlermeldung ist nicht sehr nützlich. Versuche: 'if ((Fptr = fopen (FN," r + ")) == NULL) { fprintf (stderr," Datei \ "% s \" konnte nicht geöffnet werden. \ N ", FN);' – wildplasser

Antwort

1

In dem von Ihnen angegebenen Beispiel hat der Dateiname (der in "" verwendet werden soll) mehr als die 30 Zeichen, die Sie für die Variable FN zugewiesen haben, und enthält ebenfalls ein Leerzeichen. Um diese Zeichenfolge von stdin zu lesen, können Sie etwas wie folgt verwenden:

char FN[129]; 

if (scanf("%128[^\n] ", FN) != 1) { 
    fprintf(stderr,"No string was read from stdin.\n"); 
}