1.傳給未分配內存的const char* (LPCTSTR)指針.
CString cstr(asdd);
const char* ch = (LPCTSTR)cstr;
ch指向的地址和cstr相同。但由于使用const保證ch不會修改,所以安全.
2.傳給未分配內存的指針.
CString cstr = "ASDDSD";
char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);
cstr.ReleaseBuffer();
//修改ch指向的值等于修改cstr里面的值.
//PS:用完ch后,不用delete ch,因為這樣會破壞cstr內部空間,容易造成程序崩潰.
3.第二種用法。把CString 值賦給已分配內存的char *。
CString cstr1 = "ASDDSD";
int strLength = cstr1.GetLength() + 1;
char *pValue = new char[strLength];
strncpy(pValue, cstr1, strLength);
CString中有個LPCTSTR類型轉換運算符。所以我做以下運算:
_itoa(m_num3,(char *)((LPCTSTR)str),10)。不幸的是,當str的大小變化時,debug報錯。
錯誤的原因在于,當寫入str的字符數(shù)發(fā)生變化時,會重新分配str所占空間,這時CString類內部的字符指針就無效了,故報錯。但這在Release版本下不會出現(xiàn)問題。原來對CString類已經(jīng)進行了優(yōu)化。當需要分配的內存
小于64字節(jié)時,直接分配64字節(jié)的內存。
解決的方法是使用LPTSTR CString::GetBuffer(intnMinBufLength)。該函數(shù)是先將字符寫入一個指定大小緩沖區(qū),并返回緩沖區(qū)地址作為字符指針。而如果要用返回的地址指向的字符串去改變原來的字符串,就需在使用一切CString方法前調用ReleaseBuffer(),這樣新開辟的緩沖區(qū)就成為當前CString對象的合法字符緩沖區(qū),因為任何的CString方法的調用都可能引起緩沖區(qū)地址改變。