您的位置:首页 > 其它

CString 与 char * 和 const char*的转换,以及在Unicode项目中的使用.

2009-01-08 15:07 423 查看
这是个老的不能再老的话题,实验一个收集一个,解决一个。
CString可以直接强转成LPCTSTR使用:

CString cstr;

TCHAR * a = (LPCTSTR)cstr;
如果需要LPTSTR,只需要继续强转:

CString cstr;

TCHAR * a = (LPTSTR)(LPCTSTR)cstr;

注意,LPCTSTR和LPTSTR都是宽字符指针。用在Unicode的工程中,上述代码正确。但是,此时a里面的内容是宽字符集,若cstr="22",则a的内容是"0x3200 0x3200",因为00会在第二个字符就遇到,所以写文件的时候如果用普通的fprintf写入第一个2就结束了,因为看到了/0结束符号。如果非Unicode则可以正确写入文件。

如果想把CString转成ASCII的char使用,则需要通过宏T2A完成,并且需要经过GetBuffer(0)作为中转。

USES_CONVERSION;

CString strTime("2008");

const char* st = T2A(strTime.GetBuffer(0));

此时st成功转成const char*类型。此时用普通的fprintf能够正确的写入文件

用fprintf写问文件时换行键用/n表示,不要/r。
而在VC的控件里面,需要/r/n一起表示才能实现换行。
一般情况下/n表示换行,表示移到下一行的同列
/r表示回车,表示放到最左边
参考http://hi.baidu.com/xhero2008/blog/item/2b67f6dc683de8a4cd1166f9.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐