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.