我有以下代码
char *GetBytesString(char message[])
{
wchar_t utf16_str;
char *ptr;
mbstowcs(&utf16_str, message, sizeof(message));
ptr = (char *) malloc(sizeof(utf16_str) + 2);
memcpy(ptr, &utf16_str, sizeof(utf16_str));
return ptr;
}
每当我尝试调用它时,我都会收到错误消息,说明在utf16_str周围发生了堆损坏。我该怎么做才能解决它?
谢谢!
答案 0 :(得分:4)
停止覆盖随机内存。
此:
wchar_t utf16_str;
仅为一个宽字符保留空间,然后将整个转换后的字符串写在其上。
您应首先执行malloc()
,但需要使用strlen()
来确定需要多少个字符。然后转换为已分配的缓冲区,并返回该缓冲区。
还有更多问题,例如sizeof message
无法像您预期的那样发挥作用。
答案 1 :(得分:1)
应该是wchar_t *utf16_str
而不是wchar_t utf16_str
。有关mbstowcs
的msdn示例,请参阅link。