Rückgabewert einer Fkt wird nicht in den Eingabeparam einer anderen Fkt übernommen



  • Hallo,

    hab das Problem, dass der Rückgabewert einer Funktion nicht
    in den Eingabeparameter einer anderen Funktion geschrieben wird
    (obwohl sie vom gleichen Typ sind const char*).

    void fkt_out()
    {
        const char* test = "xyz";
    
        return test;
    }
    
    void fkt_in(const char* input)
    {
        std::cout<<"input: "<< input <<std::endl;
    }
    

    input ist leer.

    Wie kann man das beheben?



  • Hi,

    also einerseits sehe ich nicht, wo fkt_out() und fkt_in() irgendetwas miteinander zu tun hätten. (rufen sich nicht gegenseitig uaf und teilem auch keine Variable und das hier:

    cpp_anfaenger schrieb:

    ...

    void fkt_out()
    {
    ...
        return test;
    }
    

    Sollte Dir der Compiler auch (zu Recht) ankreiden.

    Noch 2 Tipps:
    - Nimm cpp-Tags (und nicht "code")
    - Nimm gleich std::string - ist gerade für Anfänger sehr viel einfacher/sicherer/...

    Ich weiß nicht genau, was DU wirklich damit willst, aber vielleicht ja sowas:

    #include <iostream>
    #include <string>
    
    std::string fkt_in() {
       std::string text = "xyz";
       return text;
       // Oder direkt: return "xyz"; Objekt wird automatisch erzeugt
    }
    
    void fkt_out(std::string const& input) { // "input" finde ich unglücklich benannt, denn es soll ja ausgegeben werden...
        std::cout<<"input: "<< input <<std::endl; // '\n' statt std::endl tut's oft genausogut - es muss nicht unbedingt jedesmal geflusht werden
    } 
    
    int main() {
       fkt_out(fkt_in());
       return 0;
    }
    

    Gruß,

    Simon2.



  • arg sry

    hatte eine zeile vergessen!

    void fkt_in(const char* input)
    {
        input = fkt_out();
        std::cout<<"input: "<< input <<std::endl;
    }
    


  • cpp_anfaenger schrieb:

    arg sry

    hatte eine zeile vergessen!

    void fkt_in(const char* input)
    {
        input = fkt_out();
        std::cout<<"input: "<< input <<std::endl;
    }
    

    Damit kompiliert Dein Beispiel immernoch nicht. Also kann input zur Laufzeit auch nicht leer sein.

    ➡ KOMPILIERBARES Codebeispiel bitte, rumraten macht keinen Spass!



  • Hallo cpp_anfaenger,
    zu deinem Code:

    void fkt_out()
    {
        const char* test = "xyz"; // Zeiger auf Speicherbereich, welcher mit
                                  // "xyz" belegt wird
    
        return test;              // return Zeiger auf Speicherbereich
    }
    

    Und genau da liegt meiner Meinung nach das Problem, der Zeiger den du da mit "XYZ" initialisierst hat nur innerhalb des Skopus der Funktion "fkt_out()" Wirkung, beim Verlassen also "return test" verliert der Zeiger test seinen Wert bzw. seine Wirkung. Das Problem lässt sich lösen indem du den Zeiger statisch machst, also "static const char *test = "xyz", somit bhält auch nach verlassen der Funktion test seinen Wert.

    Lg Tobi



  • Ok ich nehm alles zurück anscheint liegt nicht am Skopus sondern daran das du deine Funktionen nicht richtig definiert hast, gar net gesehn 😉

    const char *fkt_out( ) {
    
        const char* test = "xyz";
    
        return test;
    } 
    
    void fkt_in( const char* input ) {
    
        printf( "%s", input );
    } 
    
    int main( ) {
    
        fkt_in( fkt_out( ) );
    
        getchar( );
        return 0;
    }
    

    So funktionier das.

    Lg Tobi



  • Der Rückgabewert void bei deiner Fkt. fkt_out ist das Problem



  • sry, bin etwas verballert heute o_O
    beim Umschreiben in ein kurzes veranschauliches Beispiel
    hab ich ein paar Dinge vergessen.

    const char* fkt_out()
    {
        const char* test = "xyz";
    
        return test;
    }
    
    void fkt_in(const char* input)
    {
        input = fkt_out();
        std::cout<<"input: "<< input <<std::endl;
    }
    

    Danke für Eure Hilfe!



  • Entschuldigt, immer noch falsch. Hätte im Bett bleiben sollen!!

    const char* fkt_1()
    {
       const char* test = "xyz";
       return test;
    }
    
    static void fkt_2()
    {
       x = fkt_1();
       fkt_3(x);
    }
    
    void fkt_3(const char* y)
    {
       std::cout<<"y: "<< y <<std::endl; 
    }
    


  • x ist vom typ const char*



  • Auf was willst du hinaus? 🙄



  • y ist leer.
    nochmals sry!



  • Problem gelöst, Thread bitte löschen.
    test musste static sein.


Anmelden zum Antworten