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