如何正确使用MultiByteToWideChar

And*_*v93 3 c++ windows msdn wstring multibyte-functions

我正在使用MultiByteToWideChar将我的字符串转换为wstring.我首先尝试获得我的wstring所需的大小.根据文档传递0作为最后一个参数应该完成这个.使用MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);返回0作为wstring缓冲区的所需大小.我已经验证str也是非空字符串.我在这做错了什么?

The*_*ish 5

MSDN文档:

对于UTF-8或代码页54936(GB18030,从Windows Vista开始),dwFlags必须设置为0或MB_ERR_INVALID_CHARS.否则,该函数将失败并显示ERROR_INVALID_FLAGS.

您正在使用CP_UTF8但也传递MB_COMPOSITE标志,这就是它失败的原因.