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!
