(String) Return Wert aus Shared Library unvollständig
-
Moin!
Ich habe mir eine eigene Shared Library geschrieben, die ich zu meinem Programm dazulinke. Sie erstellt mittels Xerces und Xalan ein XML Schnipsel und gibt diesen als String zurück bzw. als const char*.
Die sieht in etwa so aus:
extern "C" const char* getHoehe(const char* attr){ int value = 222222; stringstream ss; ss << value; string strval = ss.str(); string attribut = attr; cout << "CONST CHAR*" <<getRes(attribut, strval).c_str() << endl; cout << "STRING " << getRes(attribut, strval) << endl; string stemp = getRes(attribut, strval); const char* temp = stemp.c_str(); return temp; }
Das Problem ist, dass der String, der an das Hauptprogramm zurückgegeben wird, nicht vollständig ist.
Folgende Ausgaben kommen bei Ausführung des kompletten Programms zu Stande:
CONST CHAR*<Attribute><Name>Hoehe</Name><Value>222222</Value></Attribute>
STRING <Attribute><Name>Hoehe</Name><Value>222222</Value></Attribute><Attribute><Name>Hoehe</Name><Value>222222</Value></Attr`
Die letzte Zeile wird im Hauptprogramm ausgegeben und zwar mittels:
tmp = (func)(prop.c_str()); cout << tmp << endl;
Das Apostroph ist kein Tippfehler, sondern ist so aus der Console kopiert und wird so ausgegeben.
Kann mir jemand sagen, warum der String am Ende abgehackt ist?! Ich verstehe einfach nicht, wo das Problem liegt!!!Danke im vor.raus!
Gruß Sdy
-
stemp und damit auch der Speicher auf den temp (also dein Rückgabewert) zeigt, wird beim verlassen der Funktion freigegeben.
Müsstest also mit new Speicher in der Bib anfordern und dann in deinem Programm freigeben.
-
Danke, das wars! Ganz dummer Fehler