如何将 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;
}

我的主要目标是能够将普通字符字符串集成到 Unicode 应用程序中。非常感谢你们提供的任何建议。

原文由 AutoBotAM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 839
2 个回答

使用 std::wstring 而不是 C99 可变长度数组。当前标准保证 std::basic_string 的连续缓冲区。例如,

 std::wstring wc( cSize, L'#' );
mbstowcs( &wc[0], c, cSize );

C++ 不支持 C99 可变长度数组,因此如果您将代码编译为纯 C++,它甚至无法编译。

通过这种更改,您的函数返回类型也应该是 std::wstring

记得在 main 中设置相关的语言环境。

例如, setlocale( LC_ALL, "" )

原文由 Cheers and hth. - Alf 发布,翻译遵循 CC BY-SA 4.0 许可协议

auto Ascii_To_Wstring = [](int code)->std::wstring
{
    if (code>255 || code<0 )
    {
        throw std::runtime_error("Incorrect ASCII code");
    }
    std::string s{ char(code) };

    std::wstring w{ s.begin(),s.end() };
    return w;
};

原文由 abdulrhmanOmran 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题