如何正確將char 轉換為wchar_t 以進行Unicode 整合
將char 字串轉換為wchar_t 對於將普通字串整合到Unicode 應用程式中至關重要。一種常見的方法是透過 mbstowcs() 函數。
原始嘗試:
以下程式碼可能看起來像是一個簡單的實現,但不幸的是產生了意想不到的結果:
<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>
深入探究:
問題在於將wc 宣告為局部變數。函數回傳後,wc 被釋放,函數的指標指向垃圾記憶體。
解決方案:
為了解決這個問題,我們動態地為 wc 分配記憶體並傳回一個指向它的指標。以下修改後的程式碼示範了這一點:
<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>
警告:
需要注意的是,呼叫程式碼現在負責釋放動態分配的記憶體以防止記憶體佔用洩漏。
以上是為什麼嘗試使用 mbstowcs() 將 char 轉換為 wchar_t 會導致意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!