在 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中文网其他相关文章!