CString const char*与char*之间的转换关系


一、


使用函数_tcscpy_s:


CString theString( "This is a test" ); 
int    sizeOfString = (theString.GetLength() + 1); 
LPTSTR  lpsz = new TCHAR[ sizeOfString ]; 
_tcscpy_s(lpsz, sizeOfString, theString);


最后再转换一下lpsz为const型的


LPTSTR在UNICODE环境下编译是wchar_t类型


 


二、


CString str = _T("Hello World!");


char szStr[256] = {0};


wcstombs(szStr, str, str.GetLength());//Unicode转换为ASCII


const char * p = szStr;


 三、


size_t mbstowcs(    wchar_t* wcstr,    const char* mbstr,    size_t count );ASCII转换为Unicode


参数解释如下:


wcstr
The address of a sequence of wide characters.
mbstr
The address of a sequence of multibyte characters.
count
The number of multibyte characters to convert.
四、


CString IMSI=_T("888888888888888"); 


 char *pBuffer1 = NULL;
  pBuffer1 = new char[IMSI.GetLength()+1];
  ZeroMemory(pBuffer1, IMSI.GetLength()+1);
  USES_CONVERSION;
  pBuffer1=(char*)W2A((LPCTSTR)IMSI);
  使用pBuffer1后,delete[] pBuffer1;但是我调试的时候报错,显示内存崩溃,后来我不用new了,直接初始化一个char数组,示例如下:


  char pBuffer1[16]={0};


  USES_CONVERSION;
  strcpy(pBuffer1,(char*)(W2A((LPCTSTR)registerPak.IMSI)));


这样也不用delete了,不会出现内存问题,如果哪位知道内存崩溃的原因给我留言啊!!



CString是个好东西,有很多好用的成员函数,并且动态分配内存空间。但在MFC学习初期,容易把CString与const char*,char*混淆。遇到三种类型数据转换时,总是得过且过。下面就剖析一下三者之间的转换关系与方法。
 
1、CString与const char*(LPCTSTR---是在Unicode环境下const char*的宏定义)
 
CString类提供一个const char*()把CString类型转换为LPCTSTR类型。
比如AfxMessageBox()的使用,可以采用:
char szMessageText[] = "Unknown error";
AfxMessageBox(szMessageText);
也可以这样:
CString strMessageText("Unknown ;error");
AfxMessageBox(strMessageText);
 
CString类也提供了一个构造函式把LPCTSTR类型转换为CString类型。比如:
CString strTruth;
strTruth += " is alive";
 
2、CString与char*
调用CString::GetBuffer在Buffer中开辟一定大小的空间并返回一个char*。注意要在使用完char*后要调用CString::ReleaseBuffer以此保证CString的动态性。例如:
CString strTest("test");
strncpy(strTest.GetBuffer(5), "T", 1);
strTest.ReleaseBuffer();
ASSERT(strTest == "Test");
编写以字符串为参数的函数所遵循的规则:
a、如果函数不改写字符串的内容并且要调用C Runtime的函数,那么函数要用const char*类型参数;
b、如果函数不改写字符串的内容并且要调用CString的成员函数,那么函数要用const CString&类型参数;
c、如果函数要改写字符串的内容,那么函数要用CString&类型参数。 
 
  
转自http://blog.csdn.net/tridrop/article/details/2307876

你可能感兴趣的:(VC)