首頁 >後端開發 >C++ >如何在保留分配的記憶體的同時安全地將 char 轉換為 wchar_t?

如何在保留分配的記憶體的同時安全地將 char 轉換為 wchar_t?

Barbara Streisand
Barbara Streisand原創
2024-10-29 15:31:02356瀏覽

How to Safely Convert char to wchar_t While Preserving Allocated Memory?

將char 轉換為wchar_t

將字元陣列從ASCII 轉換為Unicode 時,在保留分配的記憶體方面提出了挑戰記憶。嘗試的解決方案可能類似於以下內容:

<code class="cpp">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>

但是,由於 wc 的本地定義,這種方法有缺陷,它在函數呼叫結束時被釋放,導致未定義的行為。

為了避免這個陷阱,需要進行一個簡單的修改:

<code class="cpp">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>

在這個調整後的程式碼中,wc是使用new動態分配的,確保其在函數呼叫之外的持久性。因此,呼叫代碼有責任釋放已分配的記憶體以防止記憶體洩漏。

以上是如何在保留分配的記憶體的同時安全地將 char 轉換為 wchar_t?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn