segmentation fault bei einfachem Programm
-
Hallo,
wenn ich dieses Programm ohne Argumente aufrufe bekomme ich die "usage" Meldung + ein segmentation fault. Woran liegt das hier?
#include <stdio.h> #include <stdlib.h> // simple vigenere cipher // Usage: prog key file_in file_out int main(int argc, char *argv[]) { FILE *fi, *fo; char *cp; int c; if (argc <= 4) { fprintf(stderr, "Usage: %s key file_in file_out\n", argv[0]); exit(-1); } if (cp = argv[1] && *cp != '\0') { fi = fopen(argv[2], "rb"); if (fi == NULL) { fprintf(stderr, "Can't open file: %s\n", argv[2]); exit(-1); } fo = fopen(argv[3], "wb"); if (fo == NULL) { fprintf(stderr, "Can't open file: %s\n", argv[3]); exit(-1); } while ((c = fgetc(fi)) != EOF) { if ( !*cp ) cp = argv[1]; c ^= *cp; cp++; fputc(c, fo); } fclose(fi); fclose(fo); } return 0; } // main
-
Spendier der Zeile 18 mal ein paar mehr Klammern. Derzeit macht die nicht das, was du wahrscheinlich denkst. Auf höherer Warnstufe würde ein guter Compiler da derzeit auch etwas vonwegen Integer zu Pointer Konvertierung sagen, wodurch du den Fehler auch selber hättest finden können. Vergleiche mit Zeile 35, wo du es richtig machst.
-
Habs ein wenig abgeändert. Also das Programm hatte davor auch genau das gemacht was es soll. Warnlevel ist auch hoch -> keine Warnungen.
#include <stdio.h> #include <stdlib.h> // simple vigenere cipher // Usage: prog key file_in file_out int main(int argc, char *argv[]) { FILE *fin, *fout; char *key; int c; if (argc < 4) { fprintf(stderr, "Usage: %s key file_in file_out\n", argv[0]); exit(-1); } if ( (key = argv[1]) && ((*key) != '\0') ) { fin = fopen(argv[2], "rb"); if (fin == NULL) { fprintf(stderr, "Can't open file: %s\n", argv[2]); exit(-1); } fout = fopen(argv[3], "wb"); if (fout == NULL) { fprintf(stderr, "Can't open file: %s\n", argv[3]); exit(-1); } while ( (c = fgetc(fin)) != EOF ) { if ( ! (*key) ) key = argv[1]; c ^= *key; key++; fputc(c, fout); } fclose(fin); fclose(fout); } return 0; } // main
Beim Aufruf bekomme ich sowas hier:
... also Aufruf ohne Argumente...
rifkin@h4:~/src/crypto/veg$ veg1
Usage: veg1 key file_in file_out
Segmentation faultrifkin@h4:~/src/crypto/veg$ veg1 1
Usage: veg1 key file_in file_out
Can't open file: (null)Hier versucht er die Datei zu öffnen. Nach meinem Verständnis dürfte das Progamm diesen Abschnitt gar nicht erreichen.
-
OK. Sorry. Ich hatte schlichtweg die falsche Datei editiert/ kompiliert auf meinem System.
Ich geh jetzt besser schlafen. Gute Nacht.