將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中文網其他相關文章!