在Unicode 應用程式中,整合標準char 字串需要將char 轉換為wchar_t。然而,嘗試實現這種轉換經常會遇到未定義的行為。
考慮以下函數:
const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs (wc, c, cSize); return wc; }
此函數指派一個 wchar_t 數組,將 char 轉換為 wchar_t,並傳回指向 wc 的指標。然而,wc 是一個局部變量,在函數末尾被釋放,當返回的指標被取消引用時,會導致未定義的行為。
可以透過分配來修正錯誤在函數內動態分配wchar_t* 陣列:
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; }
這種動態分配確保記憶體將持續超出函數的範圍
值得注意的是,GetWC() 的呼叫者現在負責釋放分配的記憶體。否則將導致內存洩漏。
以上是如何在 Unicode 應用程式中安全地將 char 轉換為 wchar_t?的詳細內容。更多資訊請關注PHP中文網其他相關文章!