Hallo,
Ich muß gestehen, ich kann dir leider auch nicht genau
erklären was das schief läuft aber bei mir kommt der Fehler
erstens nur im Debug-Modus (VC++) und zweitens auch dann
nicht, wenn ich statt…
char *x = „BEISPIELTEXT“;
char x[] = „BEISPIELTEXT“;
…einsetze.
Das sind ja auch zwei völlig unterschiedliche Dinge. Wenn du den ersten Ausdruck durch einen C++ Compiler schiebst, solltest es zumindest eine Warning geben. Genaugenommen muß man den ersten Ausdruck wie folgt schreiben:
const char *x = „BEISPIELTEXT“;
Hier wird nur ein Zeiger angelegt, der auf eine Zeichenkette verweist. Die Zeichenkette ist readonly und darf potentiell in einem readonly Speicher (Code-Segement!?) liegen. Der Schreibzugriff auf x[0]=…; ist undefiniert und vermutlich der Auslöser für die Access-Violation.
char x[] = „BEISPIELTEXT“;
Dieser Ausdruck hingegen legt ein Feld an, welches mit den Werten initialisiert wird. Ein sizeof(x) liefert die strlen(„BEISPIELTEXT“)+1 zurück. Im ersten Fall ist sizeof(x) jedoch gleich sizeof(char*) und somit völlig unabhängig vom Inhalt.
Gruß Markus