Rückgabetyp: Pointer auf wchar_t
-
Hallo Zusammen,
ich habe folgendes Problem, bei dem mir weder Google noch die Forensuche weiterhelfen konnte:
Grundsätzlich möchte ich einen "std::string" in einen "const wchar_t*" übersetzen. Dafür habe ich mir eine kleine Helperkklasse gebaut, so dass ich folgenden Funktionsaufruf habe:
const wchar_t* test = myStringHelper.stdstring2wchart(std::string InputString)Die Funktion "stdstring2wchart" muss mir einen wchar_t-Pointer zurückgeben können. Zum einen, weil ich mit dem Pointer weiterarbeiten will und zum anderen, weil ich nicht weiß, wie lang der std::string sein kann. (Naja, abschätzen und Speicher vorhalten könnte ich schon...)
Definiert ist die Funktion in der Klasse dann so:
const wchar_t* StringHelper::stdstring2wchart(std::string InputString) { size_t needed = ::mbstowcs(NULL, &InputString[0], InputString.length()); std::wstring output; output.resize(needed); ::mbstowcs(&output[0], &InputString[0], InputString.length()); const wchar_t *pout = output.c_str(); return pout; }So. Und nun das Problem: Der Pointer zeigt ab Verlassen der Funktion "stdstring2wchart" ins Nichts, und im oben stehenden Code erhalte ich nur Müll. Um die Übergabe eines Pointers komme ich nicht herum.
Was kann ich also machen, damit das funktioniert?
Liebe Grüße,
Timm
-
Mach es über einen
std::wstringund gibt diesen zurück:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-168607.htmlGrüssli
-
btw:
size_t needed = ::mbstowcs(NULL, &InputString[0], InputString.length());
Ich glaube nicht, dass das geht...bb
-
Hallo Dravere,
Vielen Dank für den Link auf den Forenbeitrag. Ich habe die Klasse auch sofort übernommen, das Objekt erzeugt und getestet.
Dennoch meckert die nachfolgende Funktion, die ein const wchart_t* erwartet rum:
"'std::wstring *__w64' kann nicht nach 'const wchar_t *' konvertiert werden"Bin ratlos, wie ich die Konvertierung nun vervollständige.
Hier mein Testcode:
std::wstring w = to_wstring(InputString); const wchar_t* temp = &w;
-
Okay. Diesmal habe ich mir selbst helfen können:
Der Code nach der std::string nach wstring-Konvertierung:
std::wstring w = to_wstring(InputString); const wchar_t* temp = w.c_str();Danke für eure Hilfe & die sehr nette Klassendefinition, die ich mir jetzt erstmal genauer anschaue, um genau zu verstehen, was da passiert!
Merci!