string <-> char?
-
Hallo,
char c; char save[100000]; FILE *fp; fp = fopen(path, "r"); if (fp == NULL) { // Datei kann nicht geöffnet werden printf("Can't open file: "); printf("%s", path); printf(" -> Insufficient rights?\n\n"); //fp = fopen(".", "r"); ODER: return; } while ((c = fgetc(fp)) != EOF) { strcat (save, c); // Now we scan the file }
Ich bekomm n Seg Fault bei dem strcat() wie muss ich die save Variable sonst wählen?
LG
-
Du musst den strcat einen pointer uebergeben, nicht char c selbst. Aendere
char c ; char save[10000] strcat(save, c) ;
zu
strcat(save, &c) ;
siehe auch, fuer mehr info, die man page von strcat.
Gruss,
-
Zeichenweise einzulesen ist keine gute Idee, da langsam! Und fgetc liefert bewußt einen int und keinen char zurück, weil EOF ein int und kein char sein muss!
enum { LENGTH = 100000 }; char save[LENGTH]; // ... size_t off = 0; while(fgets(save + off, LENGTH - off, fp)) { off = strlen(save); if(off >= LENGTH) { fprintf(stderr, "Datei zu groß\n"); return; } }
Schalte am besten auch die Warnungen beim GCC ein (einfach -Wall -W als Flag übergeben. Am besten noch -Wall -W -pedantic -std=c99)
P.S. Wenn du eine Unix/Linux spezifische Lösung suchst, um eine ganze Datei auf einmal einzulesen, dann solltest du dir man: mmap(2) anschauen.
@jsbach
strcat erwartet vor allem einen String => Ein char-array _mit_ einer 0-Terminierung! Daher ist deine Lösung unbrauchbar.
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Okay,
Danke das Script läuft nun, doch noch ein kleines Problem:
char line2[1000]; char *dir [1000]; int j = 0; char* read_extern (char *path) { FILE* f = fopen(path, "r"); if (f == 0) { return 0; } while (fgets(line2, 1000, f)) { strcpy (dir[j], line2); ++j; } } main () read_extern("/tmp/file");
Ich bekomm bei strcpy() n seg fault!
line2 liefert mir jedoch nur Werte die maximal eine Länge von 12 Chars haben.LG
-
Warum nimmst du nicht den Code von mir, anstelle selbst wieder einen falschen Code zu erzeugen?
Schau: dir besteht aus 1000 char Zeigern, die _nicht_ initialisiert sind: Sprich die zeigen irgend wo hin => strcpy schreibt einfach irgend wo in den Speicher. Wunderst du dich da wirklich, dass du einen Segfault bekommst?