今天在写socket发送数据的时候,send函数接收的是一个char*的函数,但是我的信息报的格式是CString的,所以要有一个转化,
CString str = "ABC";
为什么从CString转变到char*
不能char* aa = (char*)str;
而必须是char* aa = (LPSTR)(LPCTSTR)str;
str 是个类的对象,aa是个变量,当然不能那样了
CString并没有重载operator char*,所以无法直接转换。
因为CString是一个Class,内存分配不像char一样上来就是字符串开始地址,还有很多别的东西比如虚函数表入口地址等。你也可以用char* pchar = str.GetBuffer(0);来转换。
用lstrcpy也可以的
char*到CString的转换
CString str;
char* a="hello";
str = a;
若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:
char chArray[] = "This is a test";
char * p = "This is a test";
或
LPSTR p = "This is a test";
或在已定义Unicode应的用程序中
TCHAR * p = _T("This is a test");
或
LPTSTR p = _T("This is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
char a[20]="Hello World";
CString str1=a;//调用了考贝函数
CString str2(a);//调用了构造函数