C/C++編程筆記:在C語言中存儲字符串!方法 + 源碼示例

在C語言中,可以使用字符指針或字符數(shù)組來引用字符串。?

字符串作為字符數(shù)組
char str[4] = "GfG";
char str[4] = {‘G’, ‘f’, ‘G’, '\0'};
當將字符串聲明為字符數(shù)組時,它們像在C中的其他類型的數(shù)組一樣存儲。例如,如果str []是自動變量,則字符串存儲在堆棧段中,如果它是全局或靜態(tài)變量,則存儲在數(shù)據(jù)段中等
使用字符指針字符串
使用字符指針字符串可以存儲在兩個方面:
1)共享段中的只讀字符串。?
在大多數(shù)編譯器中,將字符串值直接分配給指針后,它會存儲在一個函數(shù)之間共享的只讀塊(通常在數(shù)據(jù)段中)中。?
char *str? =? "GfG";?
在上面的行中,“ GfG”存儲在共享的只讀位置,但指針str存儲在讀寫存儲器中。您可以更改str以指向其他內(nèi)容,但不能更改當前str的值。因此,僅當我們不想在程序的后期修改字符串時,才應使用這種字符串。
2)在堆段中動態(tài)分配。?
字符串像其他動態(tài)分配的事物一樣存儲在C中,并且可以在函數(shù)之間共享。

讓我們看一些示例,以更好地理解上述存儲字符串的方法。
示例1(嘗試修改字符串)?
由于行*(str + 1)='n'試圖寫入只讀存儲器,因此以下程序可能會崩潰(產(chǎn)生分段錯誤)。?

下面的程序可以很好地運行,因為str []存儲在可寫堆棧段中。?

下面的程序也很完美,因為str處的數(shù)據(jù)存儲在可寫堆段中。?

示例2(嘗試從函數(shù)返回字符串)?
由于字符串存儲在共享段中,并且即使在返回getString()之后,存儲的數(shù)據(jù)仍保留在該程序中,以下程序可以很好地運行

下面的程序也可以很好地運行,因為字符串存儲在堆段中,并且即使返回getString()后,存儲在堆段中的數(shù)據(jù)仍然存在?

但是,下面的程序可能會打印一些垃圾數(shù)據(jù),因為字符串存儲在函數(shù)getString()的堆棧幀中,并且在getString()返回之后數(shù)據(jù)可能不存在。?

希望對你有幫助!更多編程知識點,會持續(xù)分享哦~
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

UP在主頁上傳了一些學習C/C++編程的視頻教程,有興趣或者正在學習的小伙伴一定要去看一看哦!會對你有幫助的~
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍分享:

編程學習視頻分享:
