以与std::wstring相同的方式使用MultiByteToWideChar吗?

std::wstring widen(const std::string &in)
{
    int len = MultiByteToWideChar(CP_UTF8, 0, &in[0], -1, NULL, 0);
    std::wstring out(len, 0);
    MultiByteToWideChar(CP_UTF8, 0, &in[0], -1, &out[0], len);
    return out;
}

最佳答案

如果您要问它是否可行,可能。这是正确的吗?

  • 您应该使用in.c_str()而不是&in[0]
  • 您至少应该在第一次检查MultiByteToWideChar的返回值。
  • 长度为(-1)的
  • MultiByteToWideChar如果成功调用,将包括一个零终止符(即成功时总是返回> = 1)。 std::wstring的长度构造函数不需要这样做。 std::wstring(5,0)将为六个宽字符分配空间; 5+零项。因此,从技术上讲,您要分配太多的宽字符。

  • MultiByteToWideChar和-1上的 cbMultiByte 文档中:

    10-04 10:08