在c ++中将UTF8string转换为UTF16string

我正在使用VC 6.0。 我的项目是用Unicode编译的。 我正在使用zlib 1.1.3来扩充包含我的UTF-8string的文件。 我得到它在ASCII,但我有一个保证,它是全英文,所以我可以把它作为一个UTF8string(我可以?)。

我已经在Codeproject中使用了build议的function如下:

WCHAR* SMUUTF8toUTF16(LPCSTR utf8, int* pLen) { WCHAR *ptr = NULL; *pLen = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); if (*pLen>1) { ptr = (WCHAR*)malloc(*pLen); if (ptr) { MultiByteToWideChar(CP_UTF8, 0, utf8, -1, ptr, *pLen); } } return ptr; } 

我的代码变得不稳定,这些错误:1.检测到严重错误c0000374 2. w3wp.exe(NTDLL.DLL)中的第一次机会exception:0xC0000005:访问冲突。

我怀疑有一个内存泄漏或被错误的指针被引用,因为当使用这个函数时,我得到了很多上面提到的错误。 我的testing还表明,当我不使用它时,堆保持良好的形状,而不是损坏。

你能否提出一个更好的实现来解决这个问题?

MultiByteToWideChar返回输出中的16位Unicode字符数 – 而不是字节数。 但malloc需要的字节数。 您必须将字符数乘以字符的字节大小,否则只能分配您需要的字节数的一半!

 ptr = (WCHAR *)malloc(sizeof(WCHAR) * *pLen);