Was ist falsch daran:
%Vor%Ich dachte, ich könnte einen Zeiger wchar_t als String verwenden ...
Ihr Code hat zwei Probleme.
Zunächst ist "Tony"
ein Zeiger auf eine Zeichenfolge von char
. L"Tony"
ist die entsprechende breite Zeichenfolge.
Zweitens weisen Sie ein einzelnes wchar_t
über new zu und verlieren sofort den Überblick, indem Sie den Zeiger Tony zuweisen. Dies führt zu einem Speicherverlust.
Ein Zeiger zeigt nur auf einen einzelnen Wert. Das ist wichtig.
Alles, was Sie getan haben, ist Platz für ein einzelnes wchar_t
und zeigen Sie darauf. Dann versuchen Sie, den Zeiger so zu setzen, dass er auf einen String zeigt (denken Sie daran, nur an das erste Zeichen), aber der String-Typ ist falsch.
Was Sie haben, ist eine Zeichenfolge von char
, die "sollte" L"Tony"
sein sollte. Aber alles, was Sie hier tun, ist Ihre vorherige Speicherzuweisung zu verlieren, weil der Zeiger einen neuen Wert enthält.
Sie möchten vielmehr genügend Platz für die gesamte Zeichenfolge reservieren und dann die Zeichenfolge in den zugewiesenen Speicher kopieren. Dies ist jedoch eine schreckliche Praxis; Tue niemals etwas, das dich explizit Speicher freigeben muss.
Benutze einfach std::wstring
und gehe weiter. %Code%. Es behandelt alle Details und Sie müssen sich keine Gedanken darüber machen, etwas zu säubern.
Da Sie ein C # -Entwickler sind, werde ich auf einige Dinge hinweisen, die C ++ anders macht.
Dies weist ein neues wchar_t zu und ordnet es t
zu %Vor%Dies ist ein Array von konstantem Zeichen
%Vor%Um ein konstantes wchar_t-Array zu erhalten, setzen Sie es mit L voran
%Vor%Damit wird t wieder auf die Konstante L "Tony" anstelle Ihres alten wchar_t ausgerichtet und verursacht ein Speicherleck, da Ihr wchar_t niemals freigegeben wird.
%Vor%Dies erzeugt eine Reihe von breiten Zeichen (wchar_t), um eine Kopie von L "Tony"
zu halten %Vor%Ich denke, die letzte Zeile ist was du willst. Wenn Sie Zugriff auf den Zeiger wchar_t benötigen, verwenden Sie t.c_str (). Beachten Sie, dass C ++ - Zeichenfolgen änderbar sind und bei jeder Zuweisung kopiert werden.
Der Weg dazu wäre
%Vor%Dies erstellt keine Kopie und weist den Zeiger nur dem const wchar-Array
zu Sie können, es ist nur, dass "Tony" ist eine fest codierte Zeichenfolge, und sie sind standardmäßig ANSI in den meisten Editoren / Compiler. Wenn Sie dem Editor mitteilen möchten, dass Sie eine Unicode-Zeichenfolge eingeben, geben Sie ihm den Präfix L, z. t = L"Tony"
.
Sie haben andere Probleme mit Ihrem Code, Ihre Zuweisung weist ein einzelnes Unicode-Zeichen (2 Bytes) zu, dann versuchen Sie, die ursprüngliche Variable auf die konstante Zeichenfolge zu verweisen, wodurch diese 2 Bytes verloren gehen.
Wenn Sie einen Puffer aus Unicode-Daten erstellen und Daten darin platzieren möchten, tun Sie Folgendes:
%Vor%das ist völlig falsch. Es gibt keine Notwendigkeit, zwei Bytes zuzuweisen, machen Sie t, um auf sie zu zeigen, und überschreiben Sie dann den Zeiger, der den verlorenen Speicher für immer leckt.
Auch Tony hat einen anderen Typ. Verwenden Sie:
wchar_t *t = L"Tony";
IMHO besser wchars überhaupt nicht verwenden - Siehe Ссылка