In einer Unicode-Anwendung erfordert die Integration von Standard-Char-Strings die Konvertierung von char in wchar_t. Versuche, diese Konvertierung zu implementieren, stoßen jedoch häufig auf undefiniertes Verhalten.
Betrachten Sie die folgende Funktion:
const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs (wc, c, cSize); return wc; }
Diese Funktion weist ein Array von wchar_t zu und konvertiert das Zeichen in wchar_t und gibt den Zeiger auf wc zurück. Allerdings ist wc eine lokale Variable, deren Zuordnung am Ende der Funktion aufgehoben wird, was zu undefiniertem Verhalten führt, wenn der zurückgegebene Zeiger dereferenziert wird.
Der Fehler kann durch Zuweisung behoben werden das wchar_t*-Array dynamisch innerhalb der Funktion:
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; }
Diese dynamische Zuweisung stellt sicher, dass der Speicher über die Lebensdauer der Funktion hinaus bestehen bleibt.
Es ist entscheidend Beachten Sie, dass der Aufrufer von GetWC() nun für die Freigabe des zugewiesenen Speichers verantwortlich ist. Andernfalls kommt es zu einem Speicherverlust.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich char in einer Unicode-Anwendung sicher in wchar_t?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!