CString/string 區別及其轉化

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   

利用MFC進行編程時,我們從對話方塊中利用GetWindowText得到的字串是 CString類型,CString是屬於MFC的類。而一些標準C/C++庫函數是不能直接對CString類型進行操作的,所以我們經常遇到將 CString類型轉化char*等等其他資料類型的情況。這裡總結備忘於此!

首先要明確,標準C中是不存在string類型的,string是標準C++擴充字串操作的一個類。但是我們知道標準C中有string.h這個標頭檔,這裡要區分清楚,此string非彼string。string.h 這個標頭檔中定義了一些我們經常用到的操作字串的函數,如:strcpy、strcat、strcmp等等,但是這些函數的操作對象都是char*指向 的字串。 而C++的string類操作對象是string類型字串,該類重裝了一些運算子,添加了一些字串操作成員函數,使得操作字串更加方便。有的時候我 們要將string串和char*串配合使用,所以也會涉及到這兩個類型的轉化問題。

1.CString
和string的轉化

string str = "ksarea"; 
CString cstr(str.c_str()); // 或者CString cstr(str.data());初始化時才行
cstr = str.c_str(); // 或者cstr=str.data();
str = cstr.GetBuffer(0); //CString -> string
cstr.format( "%s", str.c_str()); //string->CString
cstr.format( "%s", str.data()); //string->CString
str = LPCSTR(cstr); //CString->string

/*c_str()和data()區別是:前者返回帶‘\0‘的字串,後者則返回不帶‘\0‘的字串*/

2.CString和int的轉換

int i = 123; 
CString str;
str.format( "%d",i); //int->CString 其他的基本類型轉化類似
i = atoi(str); //CString->int 還有(atof,atol)

3.char*和CString的轉換

CString cstr = "ksarea"; 
char* ptemp = cstr.getbuffer(0);
char* str;
strcpy(str,ptemp); //CString->char*
cstr.releasebuffer(-1);
char* str = "lovesha";
CString cstr = str; //char*->CString string類型不能直接賦值給CString

至於int與float、string與char*之間的轉化可以使用強制轉化,或者標準庫函數進行。 

對於CString與其他類型的轉化方法很多,但其實都殊途同歸,朝著一個方向即將類型首先轉化為char*類型,因為char*是不同類型之間的橋樑。
得到char*類型,轉化為其他類型就非常容易了。
之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必擔心記憶體是否足夠、字串長度等等,而且作為一個類出現,他整合的操作函數足以完成我們大多數情況下(甚至是100%)的需要。我們可以用 = 進行賦值操作,== 進行比較,+ 做串聯等等。我們盡可以把它看成是C++的基礎資料型別 (Elementary Data Type)。

【參考資料 感謝作者】
http://blog.csdn.net/bitxinhai/archive/2008/04/14/2292014.aspx

【另】
1、string 的標頭檔:<iostream>,<string>,using namespace std;
2、CString 的標頭檔:<afx.h>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.