wchar_t* in einen anderen wchar_t* kopieren
-
Hallo ,
wchar_t* swNach ; std::wstring sNach; USES_CONVERSION; swNach = A2W( sVon.c_str()); //char* in wchar*Habe nachgelesen, der swNach zeigt jetzt auf einen Puffer , der mit
dem Makro USES_CONVERSION erzeugt worden ist.Wenn die nächste Anweisung kommt , dann wird der Puffer überschrieben.
Deswegen muss ich das Ergebnis ( den wchar* ) kopieren. Etwa mit strcpy
Aber strcpy kopiert ja den char*.Habe gedacht , es gibt wstrcpy. Bekomme aber einen Fehler.
Weiß jemand wie man einen wchar_t* kopiert ?
Mfg , Elke
-
Erstens: basic_string<>'s verwalten ihren eigenen Speicher, das heißt mit einem "sNach = swNach;" (oder sogar "sNach = A2W(sVon.c_str());") kopierst du die Daten in einen "sicheren" Speicherbereich.
Zweitens: Afaik bereitet USES_CONVERSIONS nur die Speicherverwaltung vor - jeder Aufruf von A2W() und Kollegen greift dann ein eigenes Stück vom Stack ab.
Drittens: Die wchar_t-Version von strcpy() heißt wcscpy()
-
Ehm, also stringA = stringB kopiert nichts! Die string Klasse von C++ macht ein Copy-on-Write, d.h. erst wenn sich ein String-Inhalt ändert, wird eine Kopie angelegt. Solange wird auf den gleichen String-Inhalt von zwei Strings verwiesen.
Also erst bei einem .c_str() dürfte es ein Kopieren geben... aber das muß man ausprobieren. Weiß ich jetz nicht genau.
-
Hallo CStoll,
Vielen Dank .
Habe aber noch eine Frage , vielleicht kannst du mir weiterhelfen.wchar_t* swNach ; std::wstring sNach; USES_CONVERSION; swNach = A2W( sVon.c_str());Das Ergebnis swNach ist ein wchar_t*. Die Konvertierung hat geklappt ,
der Wert steht auch drin.Diesen wchar* möchte ich als wstring ausgeben.
Und mache es so:std::wstring p_sNach = std::wstring( swNach );
Leider hat p_sNach dann keinen Wert.
Komisch, weil der wstring so einen Konstruktor hat.
Mfg , Elke
-
Artchi schrieb:
Ehm, also stringA = stringB kopiert nichts! Die string Klasse von C++ macht ein Copy-on-Write, d.h. erst wenn sich ein String-Inhalt ändert, wird eine Kopie angelegt.
Meines Wissens schreibt der Standard aber keine Copy Semantik vor, dh da kann jede Implementierung ihr eigenes Süppchen kochen.
@Elke
Alsostd::wstring p_sNach = swNach;sollte problemlos funktionieren, falls swNach ein C-String ist (oh mann, mir rollen sich die Fussnägel hoch, wenn ich diese UN Kryptik sehe
). Was steht denn in swNach?