注意,所有的代碼,建立的是win32 console application 支持MFC,因為CString,只有MFC才支持
4、 char*和CString的相互轉換
CString包含了3個值:指向某個數據緩沖區的指針、該緩沖區中有效地字符記數(它是不可存取的,是位于CString地址之下的一個隱藏區域)及一個緩沖區長度。有效字符數的大小可以使從0到該緩沖最大長度值減1之間的任何數(因為字符串結尾有一個NULL字符)
4.1 char*轉換為CString
①直接賦值
②利用格式化轉換
#include "stdafx.h"
#include "CString.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/**//////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])


{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else

{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
CString strConvert;
TCHAR* p= _T("this is a chToString test ");
//要試驗的話,只需要去掉注釋和加上注釋
strConvert = p;//直接復制
//strConvert.Format("%s",p);//格式化
//注意,這里不能直接cout<<strConvert,輸出的會是一串數字
cout<<"strConvert="<<(LPCTSTR)strConvert<<endl;
}
return nRetCode;
}
4.2 CString轉換為char*
①強制類型轉換為LPCTSTR
②使用strcpy
需要說明的是,strcpy(或可移植的_tcscpy)的第二個參數是const wchar_t* (Unicode)或const char* (ANSI),系統編譯器將會自動對其進行轉換。
#include "stdafx.h"
#include "CString.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/**//////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])


{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else

{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
//強制類型轉換為LPCTSTR
CString theString( (_T("Char test ")));
LPTSTR lpsz=(LPTSTR)(LPCTSTR)theString;
//使用strcpy
LPTSTR lpsz1=new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz,theString);
}
return nRetCode;
}
4.3使用GetBuffer
如果需要修改CString中的內容,它有一個特殊的方法可以使用,那就是GetBuffer,它的作用是返回一個可寫的緩沖指針。如果只是打算修改字符或者截短字符串,例如
CString theString( (_T("Char test ")));
LPTSTR lpsz=s.GetBuffer();

/**//*添加p的代碼*/
s.ReleaseBuffer();//使用完后及時釋放
如果還想獲得更多關于《Visual C++代碼參考與技巧大全》的內容,可點擊下面網址,
http://m.shnenglu.com/kangnixi/archive/2010/01/13/105591.html