这是个老的不能再老的话题,实验一个收集一个,解决一个。
如果需要LPTSTR,只需要继续强转:
CString可以直接强转成LPCTSTR使用:
- CString cstr;
- TCHAR * a = (LPCTSTR)cstr;
- 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表示回车,表示放到最左边