Heim > Backend-Entwicklung > C++ > Wie konvertiere ich char in einer Unicode-Anwendung sicher in wchar_t?

Wie konvertiere ich char in einer Unicode-Anwendung sicher in wchar_t?

DDD
Freigeben: 2024-11-03 09:11:03
Original
577 Leute haben es durchsucht

How to Safely Convert char to wchar_t in a Unicode Application?

Char in wchar_t konvertieren: Undefiniertes Verhalten auflösen

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;
}
Nach dem Login kopieren

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.

Problem beheben

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;
}
Nach dem Login kopieren

Diese dynamische Zuweisung stellt sicher, dass der Speicher über die Lebensdauer der Funktion hinaus bestehen bleibt.

Verantwortlichkeiten des Aufrufers

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage