Kommandozeilenargument an fopen() über eine Funktion übergeben...
-
Hallo,
ich probiere derzeit ein wenig mit Kommandozeilenargumenten und der Funktion fopen() herum und dabei hat sicht für mich ein Problem herausgestellt, welches ich selber leider nicht lösen/beantworten kann.
Was ich probiere ist über Kommandozeilenargumente den Modus für fopen als ein Argument und den Pfad der Datei die an fopen übergeben werden soll als ein anderes Argument entgegenzunehmen.
Soweit kein Problem solange keine weitere Funktion hinzugenommen wird.
Damit meine ich folgendes, die main() nimmt Argumente über die Kommandozeile entgegen und anschließend sollen die entgegengenommenen Argumente an eine Funktion übergeben werden.Diese Funktion ist nun z.B.
void read(char mod[], char *argv[2])
und wird in der main über
read(modus, argv[2])
aufgerufen.
In der Funktion read() soll nun die Datei argv[2] geöffnet werden.datei = fopen(mod, argv[2])
Nun erhalte ich jedoch die folgende Fehlermeldung, die sich auf den Aufruf der Funktion in der main bezieht.
[Warning] passing arg 2 of `read' from incompatible pointer type
Leider hilft mir das nicht viel weiter und ich hoffe nun auf eure Hilfe.
Danke.
-
Hi!
MattJ schrieb:
void read(char mod[], char *argv[2])
fopen erwartet zwei char*, wobei der erste Parameter der Dateiname und der zweite der Modus ist:
FILE *fopen( const char *filename, const char *mode );
Die Argumente kommen ja als char* in main-Programm rein, dann lass die doch in dem Format:
int read_write( char* file, char* modus ) { FILE *fp = fopen( file, modus ); if ( fp ) { puts("Success."); fclose(fp); return 0; } else puts("Failture."); return 1; } int main(int argc, char *argv[]) { if ( argc<3 ) { puts("Too few arguments."); return 1; } if ( read_write( argv[1], argv[2] ) ) return 1; return 0; }
-
int main(int argc, char *argv[]) { read(modus, &argv[2]) }
-
super, vielen Dank jetzt funktioniert es.
-
Ramsis schrieb:
int main(int argc, char *argv[]) { read(modus, &argv[2]) }
Und was soll das bringen ?
-
Dann sagt der Compiler so etwas nicht mehr!
[Warning] passing arg 2 of `read' from incompatible pointer type
-
Ramsis schrieb:
Dann sagt der Compiler so etwas nicht mehr!
[Warning] passing arg 2 of `read' from incompatible pointer type
Dafür ist der Zugriff auf argv[2] in der Funktion undefiniert (bei argc == 3), weil der Funktion ein Zeiger auf ein Array der Länge zwei, welches an der dritten Stelle von argv beginnt übergeben wird.
-
Soll zeigen wie das problem gelöst wird,
auf die fehlerbehandlung wurde verzichtet.
-
Ramsis schrieb:
Soll zeigen wie das problem gelöst wird,
auf die fehlerbehandlung wurde verzichtet.Und wenn argc == 3 ist und in der read Funktion argv[1] aufgerufen wird ?
Dann kommt jede Fehlerbehandlung zu spät.
Siehe auch den Beitrag von LordJaxom.
Gruß,
p.