Hilfe! Segmentation fault(core dumped)
-
Hallo!
Bin C-Neuling und hab da folgendes Problem:
if(argv[1] == NULL){ fprintf(stderr,"Dateiname fehlt!"); return EXIT_FAILURE; } if(argv[2] == NULL){ fprintf(stderr,"Maximale Dateigröße fehlt!"); return EXIT_FAILURE; }
wenn ich mein programm teste, und keine parameter übergebe wird mir die erste fehlermeldung ausgegeben, was ja auch richtig ist.
wenn jetzt allerdings der zweite parameter fehlt, dann bekomm ich nen meldung segmentation fault (core dumped), und meine überprüfung wird einfach ignoriert. Was mache ich falsch?
lieben Dank
Danny
-
Warum prüfst Du nicht einfach argc?
-
Prüf lieber agrc, wenn kein 2tes argv gibt, dann sollte man da auch nicht zugreifen
-
hab ich jetzt probiert, krieg immer noch segmentation fault
-
Und wie genau hast du es probiert?
-
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if (argc >= 2) { if(argv[1] == NULL) { fprintf(stderr,"Dateiname fehlt!\n"); return -1; } if(argv[2] == NULL) { fprintf(stderr,"Maximale Dateigröße fehlt!\n"); return -1; } //fprintf(stdout, "Dateiname: %c\n", *argv[1]); //fprintf(stdout, "Maximale Dateigröße: %c\n", *argv[2]); } else { fprintf(stderr, "Zu wenige Parameter!\n"); } system("PAUSE"); return 0; }
-
So, hab das jetzt mal reinkopiert, aber ich der fehler will nicht mehr weg.... weiß echt nicht was ich da noch machen soll
-
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { if (argc < 3) { fprintf(stderr, "Filename or max. File-Size missed"); return -1; } printf("%s\n\tArgumente:\n", argv[0]); printf("\t\tDateiname: %s\n", argv[1]); printf("\t\tmax. Dateigröße: %s\n", argv[2]); getchar(); return 0; }
... so evtl. besser?
-
Endlich, es klappt.... keine Ahnung was da los war...
jedenfalls vielen lieben dank
gruß
danny
-
danny83 schrieb:
Endlich, es klappt.... keine Ahnung was da los war...
Einfach: Wenn argc == 2, dann hat argv 2 Elemente, argv[0] und argv[1]. Der Zugriff aufs dritte Element - argv[2] - führt zum Crash.
-
Hmm, ups.
Deswegen gehts bei mir auch nicht immer, da argv[0] der Programmname ist und auch als Parameter übergeben wird.
Sorry, mein FehlerWie LordJaxom schon schrieb: argc (argument count) gibt die Anzahl der Argumente (Parameter) an, in argv[] (argument vector) sind sie gespeichert (bzw. ein Pointer).
argv[0]: Programmname
argv[1]: 1. Parameter
argv[2]: 2. Parameter
...