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? p ist 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 🤡.


  • Mod

    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".


Anmelden zum Antworten