0

我有以下代码

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 周围发生了堆损坏。我能做些什么来修复它?

谢谢!

4

2 回答 2

4

停止覆盖随机内存。

这个:

wchar_t utf16_str;

只为一个宽字符保留空间 ,然后在其上写入整个转换后的字符串。

你应该做第malloc()一个,但你需要用它strlen()来确定需要多少个字符。然后转换成分配的缓冲区,并返回。

还有更多问题,例如sizeof message不像您可能期望的那样工作。

另外,请不要malloc()在 C中转换返回值。

于 2013-08-23T10:53:16.157 回答
1

它应该是wchar_t *utf16_str而不是wchar_t utf16_str. 请参阅来自 msdn 的示例链接mbstowcs以获取 .

于 2013-08-23T10:55:27.070 回答