Zeichenketten-Literal aus einer Funktion zurückgeben
-
Guten Abend,
const char* fkt() { return "hallo welt"; } int main() { const char* p = fkt(); }Stimmt es, dass das Zeichenketten-Literal im statischen Speicher landet und dessen Speicher somit erst zum Programmende freigegeben wird?
pist also nach der Anweisung gültig?Danke euch

-
Ja

-
Nexus schrieb:
Ja

Das trifft aber nur auf Zeichenketten-Literale zu oder?
-
out schrieb:
Nexus schrieb:
Ja

Das trifft aber nur auf Zeichenketten-Literale zu oder?
Nö, auf alle Sachen, die im statischen Speicher liegen.
-
Bashar schrieb:
out schrieb:
Nexus schrieb:
Ja

Das trifft aber nur auf Zeichenketten-Literale zu oder?
Nö, auf alle Sachen, die im statischen Speicher liegen.
Ich meinte das so:
void fkt() { const char* p = "hallo welt"; int i = 7; double d = 7.7; } // <--- p bleibt gültig / i und d werden ungültig. int main() { fkt(); }Dass die Zeichenektte gütlig bleibt, finde ich seltsam, aber najut
.
-
Hier ist p ja auch nur ein Zeiger auf ein statisches Objekt.
const char p[] = "hallo welt";Das wäre nicht mehr ok.
Nicht Zeiger mit Arrays verwechseln!
-
out schrieb:
Dass die Zeichenektte gütlig bleibt, finde ich seltsam, aber najut
.Warum? Wenn du "static int i;" schreibst bleibt es doch auch gültig?

-
out schrieb:
Bashar schrieb:
out schrieb:
Nexus schrieb:
Ja

Das trifft aber nur auf Zeichenketten-Literale zu oder?
Nö, auf alle Sachen, die im statischen Speicher liegen.
Ich meinte das so:
void fkt() { const char* p = "hallo welt"; int i = 7; double d = 7.7; } // <--- p bleibt gültig / i und d werden ungültig.Wie kommst du darauf, dass p gültig bleibt? Das ist genauso wie i und d eine lokale Variable und hört beim Verlassen der Funktion auf zu existieren. Was gültig bleibt ist "hallo welt".