Heim >Backend-Entwicklung >C++ >Warum führt der Versuch, char mit mbstowcs() in wchar_t zu konvertieren, zu unerwarteten Ergebnissen?
So konvertieren Sie char richtig in wchar_t für die Unicode-Integration
Konvertieren von char-Strings in wchar_t ist für die Integration normaler Zeichenketten in Unicode-Anwendungen unerlässlich. Ein gängiger Ansatz ist die Funktion mbstowcs().
Ursprünglicher Versuch:
Der folgende Code mag wie eine einfache Implementierung erscheinen, liefert aber leider unerwartete Ergebnisse:
<code class="c++">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs (wc, c, cSize); return wc; }</code>
Tiefer eintauchen:
Das Problem liegt in der Deklaration von wc als lokale Variable. Bei der Rückgabe der Funktion wird die Zuordnung von wc aufgehoben, sodass die Funktion einen Zeiger hat, der auf den Speichermüll zeigt.
Lösung:
Um dieses Problem zu beheben, weisen wir den Speicher für wc dynamisch zu und einen Zeiger darauf zurückgeben. Der geänderte Code unten zeigt dies:
<code class="c++">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t* wc = new wchar_t[cSize]; mbstowcs (wc, c, cSize); return wc; }</code>
Vorbehalt:
Es ist wichtig zu beachten, dass der aufrufende Code jetzt für die Freigabe des dynamisch zugewiesenen Speichers verantwortlich ist, um Speicher zu verhindern Lecks.
Das obige ist der detaillierte Inhalt vonWarum führt der Versuch, char mit mbstowcs() in wchar_t zu konvertieren, zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!