读书人

LPWSTR转char*的一个有关问题

发布时间: 2012-06-21 13:42:41 作者: rapoo

LPWSTR转char*的一个问题
LPWSTR转char*,问题:
函数(Unicode to Ansi):

//------------------------------------------------
// Unicode to Ansi
//
char* WstrToAstr(WCHAR *wstr)
{
unsigned long i = lstrlen (wstr);
char *astr;
astr = (char*) malloc (i+1);
if (astr == NULL)
return NULL;
else
memset (astr, '\0', i+1);

wcstombs(astr, wstr, i+1);
return astr;
}



LPWSTR pDocument = L"Microsoft Word - _中国医学科学院医学自助文印系统修改建议及存在问题汇总.doc";

在调用 char* pDoc = WstrToAstr(pDocument);
之后,

打印出pDoc字符串,居然是:Microsoft Word - _中国医学科学院医学自助文印系统

不知道为什么,转化后,会丢了一截,请给与指点!
多谢。

[解决办法]
WideCharToMultiByte不是有这个了么
[解决办法]
astr = (char*) malloc (i+1);

分配少了...
[解决办法]
宁可分配多了也别少了,2*i+1应该够了
用了malloc就别忘了free,pDoc用完了就把它free掉
[解决办法]
LPWSTR W指宽字节
用WideCharToMultiByte
也可以用c标准库的 wctomb
[解决办法]
分配少了, 中文占两个字节, 要用wcslen()来取长度
[解决办法]
双字节字符占两个字节--不管是中文还是英文都是两个字节的,而且要注意末尾对齐,就是双字节末尾是两个'\0'而不是一个!

读书人网 >C++

热点推荐