将一个string添加到列表框会导致奇怪的字符

我已经做了一个函数,使用WIN32发送string到列表框

char data[] = "abcd"; addToList(hWnd,data); void addToList(HWND hWnd,char data[] ){ SendMessage(GetDlgItem(hWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM)data); } 

当我执行这是发送数据列表框但问题他们出现在怪异的字符,我已经尝试wchar_t也但问题仍然发出

首先,你应该检查你的API调用错误。 您需要检查所有调用API函数的返回值。

这就是说,鉴于问题中的代码,

 SendMessage(GetDlgItem(hWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM)data); 

如果这导致项目被添加到列表框中,那么这意味着GetDlgItem确实返回了有效的窗口句柄,并且data确实指向了有效的内存。 在这种情况下,您报告的唯一解释是编码的文本不匹配。

所以,我们可以假定SendMessage宏评估为SendMessageW 。 而且由于您传递了ANSI编码的文本,所以这种不匹配解释了这些症状。 该函数将文本视为UTF-16编码。

一个明显的解决方案是使用SendMessageA 。 不过,在我看来,更好的解决方案是传递UTF-16编码的数据。

 wchar_t data[] = L"abcd"; .... void addToList(HWND hWnd, const wchar_t *data) { SendMessage(GetDlgItem(hWnd,IDC_LISTBOX), LB_ADDSTRING, 0, (LPARAM)data); } 

显然你的代码会添加错误检查,我在开始时提到。