MFC中Cstring與char * string 的轉換


一個CString 的變量 cstr
一個char *的變量 ch
怎樣實現 cstr轉成ch?

1.傳給未分配內存的const char* (LPCTSTR)指針.
   CString cstr(asdd);
   const char* ch = (LPCTSTR)cstr;
   ch指向的地址和cstr相同。但由於使用const保證ch不會修改,所以安全.
2.傳給未分配內存的指針.
    CString cstr = "ASDDSD";
    char *ch = cstr.GetBuffer(cstr.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);
4.第三種用法.把CString 值賦給已分配內存char[]數組.
    CString cstr2 = "ASDDSD";
    int strLength2 = cstr2.GetLength() + 1;
    char chArray[100];
    memset(chArray,0, sizeof(bool) * 100); //將數組的垃圾內容清空.

    strncpy(chArray, cstr2, strLength2);

 

1、string 轉 CString
CString.format("%s", string.c_str());
2、char * 轉 CString
CString.format("%s", char*);
3、char * 轉 string
string s(char *);
4、string 轉 char *
char *p = string.c_str();
(1)、如果要將string轉換為char*,可以使用string提供的函數c_str() ,或是函數data(),data除了返回字符串內容外,不附加結束符'\0',而c_str()返回一個以‘\0’結尾的字符數組。

(2)、const char *c_str();
c_str()函數返回一個指向正規C字符串的指針,內容與本string串相同.
這是為了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式.
注意:一定要使用strcpy()函數 等來操作方法c_str()返回的指針
比如:最好不要這樣:
char* c;
string s="1234";
c = s.c_str(); //c最后指向的內容是垃圾,因為s對象被析構,其內容被處理
應該這樣用:
char c[20];
string s="1234";
strcpy(c,s.c_str());
這樣才不會出錯,c_str()返回的是一個臨時指針,不能對其進行操作
再舉個例子
c_str() 以 char* 形式傳回 string 內含字符串
如果一個函數要求char*參數,可以使用c_str()方法:
string s = "Hello World!";
printf("%s",s.c_str()); //輸出 "Hello World!"

5、CString 轉 string     string s(CString.GetBuffer(CString.GetLength()));6、CString 轉 char *    charpoint=strtest.GetBuffer(strtest.GetLength());    不建議用(LPCTSTR)進行強制類型轉化,這樣strtest大小發生變化時會出現錯誤。7、CString 轉 char[100]      char a[100];      CString str("aaaaaa");      strncpy(a,(LPCTSTR)str,sizeof(a));

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com