1.傳給未分配內(nèi)存的const char* (LPCTSTR)指針. 2.傳給未分配內(nèi)存的指針. 3.第二種用法,。把CString 值賦給已分配內(nèi)存的char *,。 4.第三種用法.把CString 值賦給已分配內(nèi)存char[]數(shù)組.
CString cstr2 = "ASDDSD"; int strLength1 = cstr1.GetLength() + 1; char chArray[100]; memset(chArray,0, sizeof(bool) * 100); //將數(shù)組的垃圾內(nèi)容清空. strncpy(chArray, cstr1, strLength1); CString中有個(gè)LPCTSTR類(lèi)型轉(zhuǎn)換運(yùn)算符,。所以我做以下運(yùn)算: 錯(cuò)誤的原因在于,,當(dāng)寫(xiě)入str的字符數(shù)發(fā)生變化時(shí),,會(huì)重新分配str所占空間,這時(shí)CString類(lèi)內(nèi)部的字符指針就無(wú)效了,,故報(bào)錯(cuò),。但這在Release版本下不會(huì)出現(xiàn)問(wèn)題,。原來(lái)對(duì)CString類(lèi)已經(jīng)進(jìn)行了優(yōu)化。當(dāng)需要分配的內(nèi)存 解決的方法是使用LPTSTR CString::GetBuffer(intnMinBufLength),。該函數(shù)是先將字符寫(xiě)入一個(gè)指定大小緩沖區(qū),并返回緩沖區(qū)地址作為字符指針,。而如果要用返回的地址指向的字符串去改變?cè)瓉?lái)的字符串,,就需在使用一切CString方法前調(diào)用ReleaseBuffer(),這樣新開(kāi)辟的緩沖區(qū)就成為當(dāng)前CString對(duì)象的合法字符緩沖區(qū),,因?yàn)槿魏蔚腃String方法的調(diào)用都可能引起緩沖區(qū)地址改變,。 |
|