char als parameter



  • Hallo ich habe methode indem es eine rückgabe wert gibt
    also

    char * test ()
    {
        char tester [5];
        tester [0] = "a";
        ...
        return tester;
    }
    

    Es funktionier aber das Ergebnis stimmt nicht.
    Wie kriege ich das richtige ergebnis geliefert



  • du sollst nicht zeiger auf lokalen speicher zurückgeben.



  • Hallo danke erst mal für dein Antwort, aber wie gebe ich den sonst ein Char wert zurück



  • borhany schrieb:

    Hallo danke erst mal für dein Antwort, aber wie gebe ich den sonst ein Char wert zurück

    Indem man außen Speicher anlegt

    void test (char* tester) 
    { 
        tester [0] = 'a'; 
        ... 
    }
    

    oder indem man einen string zurückgibt

    string test () 
    { 
        string tester;
        tester+='a'; 
        ... 
    }
    


  • ich habe einige Werte, die null sind und mit der zweiten Variante klppat dies nicht este Variante geht nicht da ich es in mehreren Klasse aufrufe



  • borhany schrieb:

    ich habe einige Werte, die null sind und mit der zweiten Variante klppat dies nicht este Variante geht nicht da ich es in mehreren Klasse aufrufe

    string kann sehr wohl nullen enthalten.
    kannst auch einen vector<char> nehmen, der ist da vielleicht weniger verwirrend.



  • Oder du legst den Speicher aufm Heap (dynamisch) an:

    char* test ()
    {
        char* tester = new char[5];
        tester [0] = 'a';
        ...
        return tester;
    }
    

    Dann aber nicht das zugehörige delete nach dem Aufruf vergessen, sonst gibts Leaks !!



  • R3dNeXX schrieb:

    Oder du legst den Speicher aufm Heap (dynamisch) an:

    char* test ()
    {
        char* tester = new char[5];
        tester [0] = 'a';
        ...
        return tester;
    }
    

    Dann aber nicht das zugehörige delete nach dem Aufruf vergessen, sonst gibts Leaks !!

    Das macht eine API oder einfach Funktionen schwer zu benutzen. Es erzeugt eine Asymmetrie zwischen anfordern und freigeben des Speichers. Ist nicht empfehlenswert, wenn auch technisch möglich.

    Simon



  • Ja schon, ich wollts nur mal der Vollständigkeit halber erwähnen.
    Klar gibts bessere Wege...

    Ich persönlich würde auch die Vorschläge von volkard benutzen !



  • R3dNeXX schrieb:

    Ja schon, ich wollts nur mal der Vollständigkeit halber erwähnen.
    Klar gibts bessere Wege...

    Ich persönlich würde auch die Vorschläge von volkard benutzen !

    Für die Vollständigkeit fehlen aber noch einige Varianten... 🕶


Log in to reply