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 funktioniert 🙂

    Nun 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!
    Also

    arr[0] = malloc((strlen(string)+1)*sizeof(char));
    

Anmelden zum Antworten