首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

LPWSTR转char*的一个有关问题

2012-06-21 
LPWSTR转char*的一个问题LPWSTR转char*,问题:函数(Unicode to Ansi)://---------------------------------

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'而不是一个!

热点排行