C語言中的字串總結

2021-10-10 23:13:57 字數 1860 閱讀 5530

c語言中的c風格字串常有以下兩種儲存方式,做乙個總結,希望以後不需要再出現模稜兩可。

char陣列

如果是char str[5]= ,這存的就是乙個字元陣列,而不是乙個字串

如果是char str[6]= 這寸的就是乙個字串 為「abcde」 (c風格的字串),要留出乙個空間儲存\0表示字串終止,等價於如下定義方式:

char str[6] = 「abcde」

可以看出c風格的字串 如果是用陣列方式定義的,就要在字串長度的基礎上 + 1用來儲存\0,

char 指標

還有一種可以儲存字串的方式就是使用char型別的指標,比如

char *str = 「abcde」

這種方式要注意,str儲存的並不是字串的內容,而是字串的起始位址,在visual studio 的debug模式下,能看到str的值通常為位址+ 字串內容比如**0x7fffffffeffc 「abcde」**表示str指向的位址,(也就是字元a的位址)也就是str指標的值是0x7fffffffeffc,以這個位址為起始位址的字串的值是「abcde」

當使用printf()輸出時,格式化時選擇%s,會輸出abcde,這是printf遇到結尾符號『\0』即停止顯示列印。

所以在使用char 型別的指標儲存字串的時候會發生很多意想不到的錯誤及問題,這就是c語言中指標讓人頭疼的地方。

與字串有關的輸入輸出函式

以下說的所有字串都是用陣列儲存的

scanf

scanf輸入乙個字串而且是遇見空格就會停,比如輸入「hello world」之後,他只會讀入hello。要使用scanf("%s%s",str1,str2),才能讀入hello 和world,而且hello存在str1中,world存在str2中。

scanf("%s",str);是沒有取位址符號的,而且系統會自動在str最後補上\0

while(scanf("%s",str) != 1) 作用是持續讀入資料 在讀不到資料的時候停止迴圈

gets,puts

gets(str)就是從游標開始的地方讀到換行符,和scanf的區別就是空格也能被讀入,只有輸入回車才會停止讀入

puts(str)就是輸出乙個字串和乙個換行符,等價於printf("%s\n",str);

cin>>str1>>str2

這個也可以直接讀入兩個字串

其他函式

strcat(s1,s2) 將字串s2連線到s1之後

strcpy(s1,s2) 將字串2複製到字串1,返回字串1的值。

strcmp(s1,s2) 比較字串1和字串2的大小。如果1 > 2 返回正數,如果兩字串完全相等返回0,如果1< 2返回負數

strlen(s1)計算字串的長度,而且不把\0算進去

strlwr(str) 將字串全部轉化為小寫

strupr(str),將字串全部轉化為大寫。

使用上述函式 如果是在c語言中要包含string.h標頭檔案,如果是在c++中要包含cstring,也可以包含string.h標頭檔案,兩者區別在於cstring是對string.h標頭檔案進行了一些修改讓它更能相容c++罷了

c字串的儲存問題

程式的記憶體分配基礎,看我的另一篇部落格

c字串一般放在常量區,data段上.而且陣列方式儲存和指標方式有著很大區別。

看下面這個例子

int a = 0; 全域性初始化區

char *p1; 全域性未初始化區

main()

一定注意:陣列s儲存的內容是在執行的時候賦值的,但是指標p3指向的常量區中的字串內容是編譯時就賦值的。

C語言中的字串

從概念上講,c語言中沒有字串型別 在c語言中使用字元陣列來模擬字串 c語言中的字串是以 0 結束的字元陣列 c語言中的字串可以分配於棧空間,堆空間或者唯讀儲存區 char s1 沒有 0 所以s1只不過是個單純的字元陣列 char s2 也是乙個字元陣列,但是最後乙個元素是 0 因此s2就成了c語言...

c語言中的字串

一 c語言中的字串 c語言中沒有字串型別 字串實際就是多個字元連在一起,所有可以用字元陣列來存放字串。但是使用字元陣列輸出時需要使用for迴圈 例如 這樣使用十分不方便,有沒有一種簡約的方式,讓我們一下子就能輸出呢?有但是需要改兩個地方!1.長度要 1 2.末尾要加乙個 0 然後用 s 格式化控制符...

C語言中的字串

1.標準函式gets與puts分別用於字串的整體輸入和輸出,且gets接收字串時,字串中可包含空格。使用格式為 gets 字元陣列 或者puts 字元陣列 由標頭檔案stdio.h支援 2.常用字串處理函式 由標頭檔案string.h strlen 測試字串長度的函式,函式返回值為字串的實際長度 s...