MSDN中有一篇文章详尽的讲述了各种字符串间的转换方法及示例,地址:http://msdn.microsoft.com/zh-cn/library/ms235631.aspx
然而其中的例子有些诸如拼接字符串之类的累赘操作,正好最近在使用CFileDialog时遇到了必须把CString对象转换为char*型的情况,在网上搜了各种方法,诸如:(char*)(LPCTSTR)强转,利用Cstring类型的GetBuffer等,在VS2010中尝试无效后根据上面提到的文章编写了自己的代码:
以上代码可以正常使用。
这步使用强转不会有任何问题,因为LPCTSTR本身就是由WCHAR*用typedef声明来的,而CString到LPCTSTR的强转也没有任何问题的。利用(char*)(LPCTSTR)强转失败的原因在于WCHAR是宽字节,而char不是。我们利用wcstombs_s函数来使用从宽字节到非宽字节的安全转换。
wcstombs_s在MSDN中的说明:
地址:http://msdn.microsoft.com/zh-cn/library/s7wzt4be(v=VS.100).aspx
注意这两行代码:
wcslen(wpath) + 1是因为要算上字符串结尾的‘/0’,wpathsize*2是因为宽字节每字节是非宽字节的两倍。
再来看
path必须初始化否则无法使用。
其他类型的转换请参照本文开篇给出的MSDN的那篇文章,以及本文中的代码。