Hilfe...
-
#include <stdio.h> int main() { char string [1000]; char *arr [10000]; strcpy(string, "toller string"); printf("%s\n", string); strcpy(arr[0], string); //printf("%s\n", arr[0]); return 0; }
Segmentation Fault!
Warum ist das so?
Wo liegt hier der Fehler?
-
Der Fehler liegt in der Zeile 11:
char *arr [10000];
Hier erzeugst du dir ein Array mit 10000 Einträge des Typs: char*
strcpy(arr[0], string);
Hier möchtest du den Inhalt von string nach arr[0] kopieren (also an die
Stelle, wo der erste Pointer hinzeigt.)
Da du aber für diese Stelle keinen Speicher reserviert hast,
gibt es einen Segmentation Fault.Richtig wäre:
arr[0] = malloc(strlen(string)*sizeof(char)); strcpy(arr[0], string);
Komplett ist das dann:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char s[1000]; char *a[10000]; strcpy(s, "toller string"); printf("%s\n", s); a[0] = malloc(strlen(s)); strcpy(a[0], s); printf("%s\n", a[0]); free(a[0]); return 0; }
Gruß mcr
-
Ok, vielen Danke
Es funktioniertNun zu meiner nächsten Frage
Ich will jetzt arr[0] mit "test" vergleichen.
if (strstr (arr[0], "test") != NULL) { .... } ....
Aber ich bekomme eine Segmentation Fault bei der Zeile if (strstr( ...
Habi ch was übersehen?
-
Könnt Ihr mir bitte Helfen?
Es ist wirklich wichtig, für die Arbeit - sonst kann ich das Projekt net weitermachen!Danke!
-
Das tut bei mir:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char s[1000]; char *a[10000]; strcpy(s, "toller string"); printf("%s\n", s); a[0] = malloc(strlen(s)); strcpy(a[0], s); if (strstr(a[0], "test") != NULL) { printf("gefunden!\n"); } else { printf("nicht!\n"); } printf("%s\n", a[0]); free(a[0]); return 0; }
Ausgabe:
> ./s toller string nicht! toller string
Gruß mcr
PS: ansonsten solltest du mal einen Debugger verwenden.
Unter Linux mit gcc -g kompilieren und anschließend mit gdb
den Fehler suchen.
-
mcr schrieb:
Richtig wäre:
arr[0] = malloc(strlen(string)*sizeof(char)); strcpy(arr[0], string);
Das ist so nicht ganz richtig!
"abcd" hat die länge 4, braucht aber 5 bytes. '\0' am Ende!
Alsoarr[0] = malloc((strlen(string)+1)*sizeof(char));