C assign string aus argv[] zu char-array
Ich habe den folgenden code, der liest einen Dateinamen von der Kommandozeile aus und öffnet diese Datei:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
FILE *datei;
char filename[255];
//filename = argv[1];
//datei=fopen(filename, "r");
datei=fopen(argv[1], "r");
if(datei != NULL)
printf("File opened");
else{
printf("Fehler beim öffnen von %s\n", filename);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Dieses Beispiel funktioniert, aber ich wollen, schreiben Sie die Zeichenfolge aus der Befehlszeile in das char-array und übergeben dieses char-array zu fopen(), jedoch bekomme ich die compiler-Fehlermeldung
Error: assignment to expression with array type filename = argv[1];
Was hat dieser Fehler zu bedeuten und was kann ich tun, um es zu beheben?
- Verwenden
strcpy(filename, argv[1]);
- mögliche Duplikate von Nicht zuweisen eines Arrays zu einem anderen
- fügen Sie ein \n am Ende der "Datei geöffnet" - Meldung. Verwenden Sie Klammern um diese Anweisung für die Konsistenz mit der else-Klausel.
- Verwenden
strncpy(filename, argv[1], sizeof filename);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie kopieren den string in das char-array, das nicht getan werden kann mit eine einfache Zuweisung.
Die simple Antwort ist
strcpy(filename, argv[1]);
.Es ist ein großes problem bei dieser Methode: der Kommandozeilen-parameter sein könnte, mehr als die
filename
array, was zu einem buffer overflow.Die richtige Antwort daher:
Möchten Sie vielleicht, um die Ausgabe der Fehlermeldungen auf stderr.
Als seitliche Anmerkung, die Sie wahrscheinlich auswählen möchten, Englisch oder Deutsch, aber nicht beide gleichzeitig 😉
argv[1]
imchar *filename
. Es sei denn, Sie ändern es sich, eine sehr schlechte Idee, dessen Inhalt wird sich nicht ändern, für die Dauer der Programmausführung.