[C] Unterschied zwischen char* blub = "Hallo"; und char blub[] = "Hallo"?

Hawkster

Erfahrenes Mitglied
Hallo ihr Lieben,

gibt es einen unterschied zwischen
Code:
char* blub = "Hallo";
und
Code:
char blub[] = "Hallo";

Hier ist grad ne heiße Diskussion darüber entstanden.

Mit freundlichen Grüßen,
Hawkster
 
Hallo,

Code:
char* blub = "Hallo";
Erzeugt einen String im Codesegment - der String ist damit const kann nicht mehr geändert werden.

Code:
char blub[] = "Hallo";
Erzeugt einen String im Datensegment, der auch wieder geändert werden kann.

Gruß
MCoder
 
Hallo,

Code:
char* blub = "Hallo";
Erzeugt einen String im Codesegment - der String ist damit const kann nicht mehr geändert werden.
Das kommt drauf an. (Compiler, Optionen, OS)

Stringliterale sind allerdings meist (bzw. laut C / C++ Standard) konstant (es gibt eine Warnung vom GCC bei diesem Code!).

Korrekt wäre so:
C:
const char* blub = "Hallo";
Code:
char blub[] = "Hallo";
Erzeugt einen String im Datensegment, der auch wieder geändert werden kann.
Genauer gesagt, wird hierbei ein Array (auf dem Stack) erzeugt, welches mit dem Wert des Stringliterals (welches evtl. im Datensegment liegt) initialisiert wird (memcpy o.ä.).

Gruß
 
Zuletzt bearbeitet:
Zurück