MultiByteToWideChar和WideCharToMultiByte字符转换,新人求教

我这里没有出现乱码,但是第二个输出ansi形式字符的时候似乎多出现了一个w。稍作修改就正确了。#include \u0026lt;windows.h\u0026gt;#include \u0026lt;stdio.h\u0026gt;#include \u0026lt;stdlib.h\u0026gt;void Multi2Wide(){\tchar * pszText = "Multi2Wide";\t/*先不转换,获取转换需要BUFF的长度*/\tint nLen = MultiByteToWideChar(CP_ACP,0,pszText,\t\tstrlen(pszText),NULL,0);\t/*分配buff的空间*/\tWCHAR *pwszText = (WCHAR*)malloc((nLen+1) * sizeof(WCHAR));\t/*注意:MultiByteToWideChar系函数并不会处理C形式字符串的终止符!*/\t/*进行转换*/\tpwszText=0;\tMultiByteToWideChar(CP_ACP,0,pszText,strlen(pszText),\t\tpwszText,nLen);\tMessageBoxW(NULL,pwszText,L"Wide",MB_OK);\tfree(pwszText);}void Wide2Multi(){\tWCHAR * pwszText = L"Wide2Multi";\tint nLen = WideCharToMultiByte(CP_ACP,\t\t0,pwszText,wcslen(pwszText),NULL,0,NULL,0);\tchar * pszText = (char*)malloc(nLen+1);\tpszText=0;\tWideCharToMultiByte(CP_ACP,0,pwszText,wcslen(pwszText),\tpszText,nLen,NULL,NULL);\tMessageBoxA(NULL,pszText,"Multi",MB_OK);\tfree(pszText);}main(){\tMulti2Wide();\tWide2Multi();}其原因是MultiBytetoWideChar系列函数并不会处理C形式的字符串结尾,你必须自己做一个结尾。


    推荐阅读