在VS2008 下 把CString转换为char*

来源:互联网 发布:python http接口测试 编辑:程序博客网 时间:2024/04/28 03:02

在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字符串到一个多字节字符串。

原创粉丝点击