在VS2008下面编程的时候, 遇到必须要把CString转换为char* 的问题, 网上一搜, 答案千篇一律, 试了多个,均不行,
其中网上说的最多的两种方法:
1:
CString strSend;
strSend="abc";
char *p;
p= (char *)(LPCTSTR)strSend;
或者p=(LPSTR)(LPCTSTR)strSend;
运行结果, p只保存了 strSend的第一个字符。
2:
CString strSend;
strSend="abc";
char *p;
p=strSend.GetBuffer(0);
运行结果: 错误 1 error C2440: “=”: 无法从“wchar_t *”转换为“char *”
经过仔细搜索,在帖子发现了问题原因:http://topic.csdn.net/t/20050608/14/4068106.html#r_achor
VS c++是基于UNICODE的工程,直接转换在基于MBCS的工程可以,而在基于UNICODE的工程是不行的,CString会以UNICODE的形式来保存数据,强制类型转换只会返回第一个字符
解决方法如下:
方法一:
添加头文件#include <afxpriv.h>
CString strSend;
USES_CONVERSION;
LPSTR p = T2A(strSend); /
或者
CString strSend;
USES_CONVERSION;
char *p;
p = T2A(strSend);
因为头文件已经定于了 typed CHAR *LPSTR
(在别的论坛看到有人讲,慎用 USES_CONVERSION; 大意是多可能会导致溢出等情况,我也没看太明白,在此提醒一下,需要用到此方法的童鞋可以查阅一下)
方法二:
CString strSend;
strSend="abc";
char p[100];
int nLen = WideCharToMultiByte(CP_ACP, 0, strSend, -1, NULL, 0,NULL,NULL);
WideCharToMultiByte(CP_ACP, 0, strSend, -1, p, nLen,NULL,NULL);
WideCharToMultiByte 函数功能:映射一个unicode字符串到一个多字节字符串。