Einzelnen Character innerhalb einer Zeichenkette in einem zweidimensionalen Array ändern - wie?
-
Hallo,
folgender Code ist gegeben:
char* common_labels[2][2] = { { "Zeile1", "Zeile2", }, { "Zeile11", "Zeile22" } }; // Ersten Buchstaben des Strings "Zeile11" durch 'H' ersetzen: *common_labels[1][0] = 'H';
Oben gezeigtes Beispiel kompiliert zwar, der String scheint sich aber nicht verändert zu haben. Was mache ich falsch?
PS: Es handelt sich um eine Programmierung auf einem Microcontroller, die Syntax sollte aber dennoch mit dem Standard übereinstimmen...
-
[quote="mikey"Oben gezeigtes Beispiel kompiliert zwar, der String scheint sich aber nicht verändert zu haben. Was mache ich falsch?[/quote]
Du änderst eine Konstante, bzw. versuchst es. Die 4 Pointer in common_labels verweisen auf Zeichenkettenkonstanten (warum auch immer C da ein char* statt eines const char* erlaubt), die kannst du nciht verändern.
-
Moin Pumuckl,
danke für Deine Antwort. Warum aber kann ich dann mit folgender Zeile den String verändern?
common_labels[1][0] = "Das hier klappt!";
-
mikey schrieb:
Moin Pumuckl,
danke für Deine Antwort. Warum aber kann ich dann mit folgender Zeile den String verändern?
common_labels[1][0] = "Das hier klappt!";
Du änderst nicht den String, sondern den Pointer. Der zeigt danach auf eine andere Zeichenkettenkonstante. Im ersten beispiel dereferenzierst du ja den Pointer und schreibst dort einen neuen char in den Speicher, und das wird nicht klappen.
-
Gut, das macht Sinn. Das heißt also, ich würde mit einer neuen Referenzierung des Pointers ein Speicherleck produzieren, da die bisherige Adresse, auf die der Pointer gezeigt hat, ungenutzt bleibt, oder?
-
Nein, hierbei nicht.
Der überschriebene Zeigerwert ist zwar verloren, da du aber zuvor mit einem Stringliteral initialisiert hast, hättest du diesen Speicherbereich sowieso nicht freigeben können ( nur malloc/calloc/realloc verlangen ein free ).