【发布时间】:2016-05-12 17:09:07
【问题描述】:
我有这样使用 MultiByteToWideChar 的代码:
wchar_t * bufferW = malloc(mbBufferLen * 2);
MultiByteToWideChar(CP_ACP, 0, mbBuffer, mbBufferLen, bufferW, mbBufferLen);
请注意,该代码不使用之前对 MultiByteToWideChar 的调用来检查新的 unicode 缓冲区需要多大,并假定它将是多字节缓冲区的两倍。
我的问题是这种用法是否安全? 是否存在将字符映射为 3 字节或更大的 unicode 字符并导致溢出的默认代码页?虽然我知道用法并不完全正确,但我想评估风险影响。
【问题讨论】:
-
您正确指定了缓冲区大小,因此不会出错。转换后的字符串是否真正适合是次要的,与编码或代码点值无关,如果不适合,您将获得 ERROR_INSUFFICIENT_BUFFER。明智的做法是不要冒这种失败模式的风险,但这个决定完全取决于您。
-
@Olaf 这里不需要 MCVE。它是 Win32 并且已提供所有相关信息。
-
抱歉没有包含正确的标签,感谢@HansPassant 的回答。
-
没有字符,其UTF-16编码长度为3字节。除非您正在处理一个字节是八位字节的偶数倍的平台。 Windows 不是。