CString與string、char*的區別和轉換 - 程式人生

文章推薦指數: 80 %
投票人數:10人

string是C++標準庫(STL)中的型別,它是定義的一個類,定義在標頭檔案中。

裡面包含了對字串的各種常用操作,它較char*的優勢是內容可以動態拓展, ... 程式人生>>CString與string、char*的區別和轉換 CString與string、char*的區別和轉換 阿新••發佈:2019-01-31 我們在C++的開發中經常會碰到string、char*以及CString,這三種都表示字串型別,有很多相似又不同的地方,常常讓人混淆。

下面詳細介紹這三者的區別、聯絡和轉換:各自的區別char*:char*是一個指向字元的指標,是一個內建型別。

可以指向一個字元,也可以表示字元陣列的首地址(首字元的地址)。

我們更多的時候是用的它的第二的功能,來表示一個字串,功能與字串陣列char ch[n]一樣,表示字串時,最後有一個 '\0'結束符作為字串的結束標誌。

【例1】#include usingnamespacestd; voidtestCharArray() { charch1[12]="HelloWrold";//這裡只能ch1[12],ch1[11]編譯不通過,提示arrayboundsoverflow char*pch1,*pch2="string"; char*pch3,*pch4; pch3=&ch1[2]; //ch1[2]的地址賦給pch3 charch='c'; pch4=&ch; pch1=ch1; cout<標頭檔案中。

裡面包含了對字串的各種常用操作,它較char*的優勢是內容可以動態拓展,以及對字串操作的方便快捷,用+號進行字串的連線是最常用的操作。

【例2】#include voidtestString() { strings1="this"; strings2=string("is"); strings3,s4; s3=string("a").append("string."); s4=s1+s2+s3; cout<標頭檔案中。

CString(typedef CStringT> CString)為Visual C++中最常用的字串類,繼承自CSimpleStringT類,主要應用在MFC和ATL程式設計中,所以使用CString時要包含afx.h檔案#include

【例3】#include //因為CString不是標準C++庫定義的型別,沒有對<property中,C/C++裡面Preprocessor(預編譯),加入_AFXDLL這個巨集,OK搞定!!方法2:對著你的專案點選右鍵,依次選擇:屬性、配置屬性、常規,然後右邊有個“專案預設值”,下面有個MFC的使用,選擇“在共享 DLL 中使用 MFC”,就OK了~~~講明白了char*、string及CString的關係,可能有人對相互的轉換既然這三種類型都可用於表示字串,但又是不同的型別,那他們如何轉換呢?可用的方法參見如下:char*與string的轉換【例4】voidpCharToString() { //fromchar*tostring char*ch="helloworld"; strings1=ch; //直接初始化或賦值 strings2(ch),s3; s3=string(ch); cout<::Format(constwchar_t*,...)':cannotconvertparameter1from'constchar[3]'to'constwchar_t*'的錯誤。

這是因為你的工程的字符集不是多位元組字符集,將你的工程屬性設定為多位元組字符集即可,方法是:右鍵點選你的工程,選擇Properties\ConfigurationsProperties\General,在右側的ProjectDefaults下的CharacterSet選擇UseMulti-ByteCharacterSet。

總結從靈活度來說,string最靈活易用,其次是CString,char*的拓展性和靈活性比較差。

 一般來說在基於標準庫開發時用string,在在MFC和ATL程式設計時用CString。

CString、string之間的轉換還有其它的一些方向,但基本上都是通過char*作為橋樑,因為char*即可以方便地轉換成string,也可以方便地轉換成CString。

更多CString的用法也可參考以下連結,他們寫的更詳細,我就不再重複了。

http://www.cnblogs.com/Caiqinghua/archive/2009/02/16/1391190.htmlhttp://blog.csdn.net/lewutian/article/details/6787024歡迎加入"C/C++夢之隊"學習群:226157456 Android仿京東篩選 «上一篇 記錄:s:iterator的一些使用(status,begin和end)下一篇» 相關推薦 CString與string、char*的區別和轉換 我們在C++的開發中經常會碰到string、char*以及CString,這三種都表示字串型別,有很多相似又不同的地方,常常讓... MFC中CString與string的區別以及相互轉換關係 區別: CString類是微軟的visual c++提供的MFC裡面的一個類,所以只有支援MFC的工程才可以使用。

如在li... jQuery物件與dom物件的聯絡、區別和轉換 1、關於頁面元素的引用 通過jquery的$()引用元素包括通過id、class、元素名以及元素的層級關係及dom或者xpa... java.sql.date和java.util.date的區別和轉換 有時sim.textselronvalueofsql方法b-不同點:java.util.Date是在除了S... VC中CStringintstringchar之間的轉換 分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本... SparkSQL(8):DataSet和DataFrame區別和轉換 1.概念: (1)DataSet和RDD  大資料的框架許多都要把記憶體中的資料往磁盤裡寫,所以DataSet取代rdd... NTFS和FAT32的區別和轉換 目前最主流的兩個磁碟檔案系統就是NTFS和FAT32,兩種系統各有優劣,這篇文章就向大家介紹一下NTFS和FAT32的區別以及利用Tuxera... 檔案描述符fd和檔案指標File*fp的區別和轉換 在linux系統中把裝置和普通檔案也都看做是檔案,要對檔案進行操作就必須先開啟檔案,開啟檔案後會得到一個檔... Json和JsonNode區別和轉換 Json  Stringjson="{\"username\":\"zhangsan\",\"性別\":\"男\",\... 網路層(含有內外網ip的區別和轉換)           學習和了解ip層之前首先要分清什麼是內網ip什麼是外網ip:     內網ip實際上是區域網... 搜尋 基礎教學 Mysql入門 Sql入門 Android入門 Docker入門 Go語言入門 Ruby程式入門 Python入門 Python進階 Django入門 Python爬蟲入門 最近訪問 CString與string、char*的區別和轉換 jquery模擬a標籤的click事件,無法實現跳轉 vue+++element++tp5+個人部落格後臺管理小記 checkbox在vue中的用法小結 vim外掛taglist的安裝和使用 兩臺電腦最簡單的連線方法:直連 C#實戰023:解決新增xxx.dll的引用時報錯,請確保xxx是有效的程式集或者COM元件 JXL操作Excel內容自動換行 上傳到GooglePlay的Apk簽名被改變 HBase的幾種匯入資料的方式



請為這篇文章評分?