Using 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
至少是第一次。
-
MultiByteToWideChar
如果成功,将以 (-1) 长度调用include考虑到零终止符(即成功时它将始终返回 >= 1)。长度构造函数std::wstring
不需要这个。std::wstring(5,0)
将为六个宽字符分配空间; 5+零项。因此从技术上讲,您分配了太多的宽字符。
From MultiByteToWideChar http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072%28v=vs.85%29.aspx文档于cbMultiByte
and -1:
如果此参数为 -1,则该函数将处理整个输入字符串,包括终止空字符。因此,生成的 Unicode 字符串具有终止空字符,并且函数返回的长度包括该字符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)