String Deklaration



  • Hallo,

    ich würde gerne den genauen Unterschied zwischen den folgenden Programmen wissen:

    Programm A:

    char *x = "Das ist ein kleiner Test";
    printf("%d\n",x[15]); // Ausgabe: 105
    x[15] = 'd';
    

    Programm B:

    char x[] = "Das ist ein kleiner Test";
    printf("%d\n",x[15]); // Ausgabe: 105
    x[15] = 'd';
    

    Das erste endet mit einem Segmentation Fault, das zweite dagegen funktioniert. Der Grund verstehe ich aber leider nicht.

    MfG,
    Grumpel



  • Bei A versuchst du, einen konstanten String zu ändern, was nicht erlaubt ist.
    Bei B wird der String auf den Stack kopiert und kann deswegen verändert werden.



  • Grumpel schrieb:

    char *x = "Das ist ein kleiner Test";
    

    Dort hast du einen Zeiger auf ein Zeichenketten-Literal, das in einem Read-Only-Speicherbereich liegt. Du darfst dort keine Werte ändern.

    Grumpel schrieb:

    char x[] = "Das ist ein kleiner Test";
    

    Hier wird der Inhalt des Zeichenketten-Literals in dein Array kopiert. In deinem Array darfst du natürlich alles ändern.

    In C++ wird übrigens std::string und std::cout bentuzt.



  • Wow, das ging schnell und ist einleuchtend!

    Ich danke euch beiden! 🙂


Anmelden zum Antworten