菜鳥築基 C 四種字串型別的愛恨情仇

2021-10-05 16:17:36 字數 2632 閱讀 3189

字串是指使用『\0』終止的字串陣列。

char a[6]

=;char

* b =

"hello"

;

以上的字串在記憶體中的表示為

函式作用

strcpy(s1,s2)

將s2字串的內容複製給s1

strcat(s1,s2)

將s2字串的內容拼接到s1後面,返回s1

strlen(s1)

返回s1的字元長度

strcmp(s1,s2)

從頭開始比較s1和s2的字串,返回這個字元的差值

strchr(s1,ch)

返回s1字串中含有ch字元的位置index

strstr(s1,s2)

返回s1中的s2字串位置

其中的s1,s2都是指向字串的指標。

string是std命名空間中的乙個類,能夠給字串分配動態的記憶體。它是在上面函式的基礎上再新增了一些方法。

方法描述

在string物件s的結尾加上ch字元。

find(s1.begin(),s1.end(),s2)

在s1字串的開始帶結尾中找到子字串s2,返回迭代器

insert(p1,ch)

length(s1)

求出string物件s1的長度

replace(s1.begin(),s1.end(),舊字元,新字元)

在s1的開始到結束位置的所有舊字元換成新字元

其他方法

能夠動態擴充套件字串的大小,重構了+操作符,能夠拼接字串。在編碼的時候建議使用string型別。

在宣告和初始化的時候,指向常量字串。

一般情況下,在初始化和宣告的時候用乙個常量指標指向字串。

ps:const char* 指靜態字元指標,指標不能改變;char* const指指向靜態字元的指標,字元是可讀的不能改變。

字元陣列,乙個字串。

char

* a =

"abcd"

;char b=

"abcd"

;

這兩者的區別:

變數指標a指向常量abcd;不能變化的常量b指向能夠變化的陣列「abcd」。

其實,char* a = "abcd";是不規範的,正確的寫法為const char* a = "abcd";。在不規範的情況下,如果使用get(a,「others」),向a所指向的記憶體中寫入資料的話,會報錯,因為abcd是指向常量的,是不能改變的。

這裡再說一下c++程式在記憶體中的分布,主要有5個部分:

1、第乙個部分是棧,這裡的棧是用來儲存區域性變數。詳細的說一下,一般指的是呼叫方法或函式時儲存的相關變數,比如乙個遞迴程式,則在棧的記憶體中會儲存這三塊的內容,第一,返回位址,第二,實參的副本和這個實參的型別,第三,本次呼叫的臨時變數。這三部分壓入棧中,直到最底層的呼叫完成,則一層層的彈出資料。如果一直呼叫不能彈出資料的話則棧會溢位。

2、第二部分是堆,堆是程式設計師所能控制的記憶體,比如你new 了一塊記憶體,則會在堆中分配一塊區域。如果,你沒有用delete釋放這塊記憶體,則會一直存在,隨著程式的執行,則會造成記憶體溢位。記憶體溢位還有許多的問題,這裡可以延生到智慧型指標。

3、第三部分則是自由儲存區,當你使用malloc函式來分配記憶體時,則會分配到自由儲存區。

4、全域性/靜態儲存區:此記憶體區用來存放全域性變數和static定義的靜態資料成員或者函式,這一塊記憶體是供程式共享的一塊記憶體。

5、常量儲存區:用來存放常量,不允許更改。

內容參考:

下面再說一下,char* 和char的相同點

在作為函式引數的時候,char*和char他們是相同的。而且在函式作用域內,char b的b = = &b == &b[0]的。原因待分析。

型別轉換

string

char*

const char*

char

string

null

strcpy()

c_str()

copy()

char*

直接賦值

null

直接賦值

strncpy_s()

const char*

直接賦值

const_cast

null

strncpy_s()

char

直接賦值

直接賦值

直接賦值

null

ps:1、char*、const char*、char變成string,直接賦值;

2、char變成string、const char*、char*,直接賦值;

3、char變constchar容易,const char變char麻煩,使用(constchar*);

4、string變成char*,先通過c_str()變成const char型別,(const char*)將const char型別裝換為char型別。

5、string變成char,則需要利用迴圈挨個賦值,char*、const char*變成char則利用strncpy_s()賦值。

C 返回字串函式的四種實現方法

在討論著四種方法之前,首先要對函式有乙個簡單的認識,無論是在形實結合時,還是在return語句返回時,都有乙個拷貝的過程。你傳進來的引數是個值,自然函式在工作之前要把這個值拷貝乙份供自己使用,你傳進來的是個位址,函式也就會拷貝該位址供自己使用。同樣return返回時,如果返回乙個值,函式會將該值拷貝...

四種PHP定義字串的方式

閱讀目錄 1 簡介 在php中這門語言中,因為是弱型別語言,因此使用變數時不需提前定義即可使用。我們在使用php進行開發的時候,大多數使用雙引號 單引號進行定義字串。既然有這兩種方式,那麼他們之間肯定是有區別的。並且,除了單雙引號定義字串這兩種方式外,php還增加了heredoc和nowdoc這兩種...

PHP定義字串的四種方式

1 單引號 在單引號中,任何特殊字元都會按原樣輸出 除 和 將會被轉義輸出 僅僅只有單引號 反斜槓被轉義 2 雙引號 在雙引號中,遇到 將會解析該變數 雙引號中會轉義反斜槓的轉義字元 單雙引號之間的區別 雙引號會替換變數的值,而單引號會把它當做字串輸出。對於轉義的支援 效能速度問題,由於雙引號中的字...