Anfängerfrage
-
Hallo.
Hab eine Frage und zwar:
wenn ich einen char* erstelle z.b.
char* test = "lang";und im nächsten Schritt ändere:
test = "länger";kann ich dann etwas im Speicher überschreiben, da das Array ja größer ist
als das am Anfang initialisierte Array. Oder kann da nichts passieren?Gruß Chris
-
callmechris schrieb:
...und im nächsten Schritt ändere...
Ist nicht legal. Du hast nur einen Zeiger erstellt, keinen Speicher für das Objekt. Das gehört sozusagen dem Compiler.
-
st nicht legal. Du hast nur einen Zeiger erstellt, keinen Speicher für das Objekt. Das gehört sozusagen dem Compiler.
Aber ich kann ja trotzdem auf den String zugreifen und ihn ausgeben oder verändern, d.h. doch er liegt irgendwo im Speicher. Er ist halt automatisch weg, wenn das Programm die Methode verlässt. Aber trotzdem schreibe ich doch bei der Veränderung des Strings irgendwo im Speicher rum oder?
-
So, wie du das geschrieben hast, kannst du nix kaputtmachen. Du änderst ja nix, Du lässt nur den Zeiger 'test' auf ein anderes Literal zeigen. Und das ist legal, aber irgendwie unsinnig, weil das zuerst zugewiesene Literal jetzt nicht mehr erreichbar ist.
-
callmechris schrieb:
Aber ich kann ja trotzdem auf den String zugreifen und ihn ausgeben oder verändern
Nein, verändern ist verboten:
char *test = "lang";
test[0] = 'L';kann bei Programmausführung zu Problemen führen und sollte man deshalb unterlassen.
-
Aus diesem Grund sollten Stringliterale immer mit
constchar*deklariert werden.