2013-08-23 47 views
0

我有以下代碼的char wchar_t的結果堆損壞

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發生。我能做些什麼來解決它?

謝謝!

+1

它應該是wchar_t * utf16_str –

回答

4

停止覆蓋隨機存儲器。

此:

wchar_t utf16_str; 

只保留了一個字符空間,然後你寫最重要的是整個轉換後的字符串。

您應該首先執行malloc(),但您需要使用strlen()來確定需要多少個字符。然後轉換成分配的緩衝區,然後返回。

還有更多的問題,例如sizeof message不像你可能期望的那樣工作。另外,please don't cast the return value of malloc() in C

1

它應該是wchar_t *utf16_str而不是wchar_t utf16_str。請參閱link以獲取msdn的示例,以獲取mbstowcs