const problem
-
Hallo,
ich habe ein Problem mit const-Konstrukten der Art "<typ> const <var>", wenn ich als typ einen char* benutze.
Folgendes frisst der Compliler und läuft auch...
int* const ptrI = new int(1); ptrI = 2;Warum geht das hier nicht (= core dump)???
char* const c = "string"; c[2] = 'x'Danke und Grüsse, Chris
-
Das hat garnichts mit dem const an dieser Stelle zu tun, da es ohne genauso krachen kann. Denn der Compiler darf freistehende Literale (wie Dein "string") in Nur-Lese-Bereichen Deines Programms lagern. Das gemeine ist, dass die Definition (aus Kompatiblität zu C) auch non-const sein darf.
Folgendes erzeugt ein Array im Scope und schiebt den String dort hinein. Der String ist hier const, die Adresse des Array ist sowieso konstant.
char const c[] = "string";
-
Hi,
das hat mit "const" eigentlich nicht direkt ws zu tun, sondern damit, dass Du einen Stringliteral verändern willst .... und das ist nicht erlaubt.
örks schrieb:
...
char* const c = "string"; // c verweist auf ein String-Literal mit dem Inhalt "string" c[2] = 'x'; // Hier willst Du dahin schreiben, worauf c zeigt.Stell Dir einfach vor, dass der Compiler die Zeichenkette "string" sogar in "reinen Lesenspeicher" ablegen darf....
Kleiner Tipp1:std::string s = "string";macht evtl. eher das, was Du erwartest.
Kleiner Tipp2:
Mitchar* constsagst Du , dass Du die Adresse, auf die c zeigt, nicht verändern willst ... vermutlich meinst Duchar const *...(Damit sagst Du, dass Du den Inhalt, der an der Adresse steht, nicht verändern willst).
Gruß,
Simon2.