String,Cstring和char*的區別和轉換和char,wchar_t,TCHAR的區別

來源:互聯網
上載者:User

String、Cstring、char*之間的關係與轉換一直都是似懂非懂的,而且在MFC程式匯中也不知道什麼時候有哪一個,一頭霧水。。於是把網上的東西,結合之間的理解整理了一下。

一、概述

先說char*(這個是基礎),因為其應該是最簡單和最基礎的,其從作用上講就相當於一般的int*或者double*,這種基礎的結構。但是由於字串的特殊性,我們有單獨用了其他類來處理。在c++中用了String類,而在MFC中用了Cstring類。所以,從根本上說,char*是最基本的,而string和cstring只是對char*的一個拓展而已。

二、比較

那麼著三種的相互關係是什麼呢?因為string和cstring都是對char*的拓展,我們可以知道他們都應該是對char*繼續相容的,這種相容可以通過建構函式和operator=來進行。同時,如果進階的string和cstring要向低級的char*轉換,就需要藉助函數了。我們可以通過函數format進行。下面具體的給予說明:

1:同級之間的string和cstring

a:string到cstring

cstring.format("%s",string.c_str());

b:cstring到string

string s(cstring.getbuffer());

或者

cstring cstr; string s=sctr;

分析:a中是先把string通過函數c_str轉換到char類型,在通過char類型轉換成ctring。

  b中的getbuffer是cstring的內建函式,其返回記憶體字元緩衝區的指標,這裡也是相當於通過char進行轉換的。

  c中是通過賦值操作符進行轉換。

2:低級的向進階的轉換(char*到string或者cstring)

a:string到char*

前面已經提到string的c_str函數就是實現這個轉換,即可以用string.c_str().

b:cstring到char*

前面也提到函數getbuffer可以實現這個轉換,用ctring.getbuffer()即可,也可以通過LPCTSTR進行強制轉換。

三、總結

這裡可以看到這裡面的中間過程還是基礎的char*,記住string和cstring的兩個函數string.c_str()和cstring.getbuffer()可以得到char*即可或者LPCTSTR強制轉換。

四、附加的char,wchar_t,TCHAR的區別

這裡涉及到兩種編碼方式ANSI和Unicode,一個是美國用的(American),一個是通用的(Universal)。因此,char對應的是ANSI,wchar_t對應的是Unicode,TCHAR是兩種都相容的。對於三者通常對應的字串處理函數的標頭檔分別為str***,wcs***,_tcs***.

以strcpy函數為例子,總結一下: 

如果你想使用ANSI字串,那麼請使用這一套寫法:

 char szString[100]; strcpy(szString,"test");

.如果你想使用Unicode字串,那麼請使用這一套:

 wchar_t szString[100]; wcscpyszString,L"test"); .

如果你想通過定義_UNICODE宏,而編譯ANSI或者Unicode字串代碼:

 TCHAR szString[100]; _tcscpy(szString,_TEXT("test"));

註:(MFC中大部分都是要求通用的即wchar_t,而c++一般定義的ANSI。)

他們之間的轉換可以通過函數wcstombs(char* strDes, const wchar*, size_t nMax);這個函數的作用是把wchar轉換為char。char*
strDes 為儲存轉換後的一般字元串,wchar* 要被轉換的寬字元串。轉換的最大長度。這裡的長度是轉換的個數,而不是位元組長度。mbstowcs() 就是一個相反的過程了。


參考:http://blog.csdn.net/yanonsoftware/article/details/544428

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.