C語言程式設計 學習筆記 字串(I)

2021-08-30 11:38:22 字數 2695 閱讀 5039

字元陣列:

char word = ['h','e','l','l','o','w','o','r','l','d','!'];
這是乙個字元陣列,它的單元是word[0] = h,word[1] = e,word[2] = l……

但是這不是c語言的字串,因此不能用字串(接下來會講)的方式計算。

字串應該是這樣:

char word = ['h','e','l','l','o','w','o','r','l','d','!','\0'];
在最後單元word[11] = 『\0』;有這個才是c語言的字串(這個word[11]不計數)

字串

·以0(整數0)結尾的一串字元

·0或』\0』是一樣的,但是和』0』不同

·0表示字串的結束,但它不是字串的一部分

·計算字串長度的時候不包含這個0

·字串以陣列的形式存在,以陣列或指標的形式訪問

·更多的是以指標的形式

·string.h裡有很多處理字串的函式

·c語言的字串是以字元陣列的形態存在的

·不能用運算子對字串做運算

·通過陣列的方式可以遍歷字串

·唯一特殊的地方是字串字面量可以用來初始化字元陣列

字串變數

char *str = 「hello」;

char word = 「hello」;

char line[10] = 「hello」;

上述均是字串變數的表達形式

對於第三條,這個字串在陣列中佔6個位置(hello+\0)

只要宣告字串變數,系統都會在其後面生成乙個\0

10.1-2 字串變數專題

在上節課說明了,

char *str = 「hello」;

是乙個代表字串的指標,也就是陣列,那麼我們做如下操作會發生什麼事情呢?

#includeint main()
乍看之下沒什麼問題,但是實際上並未執行成功,系統報錯:

warning: deprecated conversion from string constant to 『char*』 [-wwrite-strings]

char *s = 「hello,world」;

#includeint main()
結果是:

s = 0000000000404000

s2= 0000000000404000

s和s2被賦予了相同的位址。

i = 000000000062fe3c

i的位址與s和s2距離非常遠,並不是堆疊放置了,以後會再提。

回到之前的問題,對於i,s,s2,它們的位址存放是這樣的:

(此處s和s2位置應該調換,翁愷寫錯了)

s是「hello,world\0」,這指向了乙個較遠的地方的位址,叫做**區

s2由於內容和s相同,所以它們指向了乙個相同的位址

對於**區,這塊地方是唯讀的(只能進行讀入操作,不能進行寫入),所以當我們想執行s[0] = 'b』的時候,計算機會報錯。

綜上,對於s,再進行一次總結:

char *s = "hello,world";
s是乙個指標,初始化為指向乙個字串常量

由於這個常量所在的地方(**區),所以實際上s是const char *s,由於歷史原因,編譯器接受不帶const的寫法

試圖對s所指的字串做寫入會導致嚴重的後果

如果要修改字串,應該用陣列:

char s = "hello,world";
i = 62fe3c

s = 404000

s2= 404000

s3= 62fe30

此時s3和i就是在堆疊裡面的變數了,其儲存形式就和普通陣列一樣,乙個乙個存

那麼,在使用過程中應該如何判斷使用指標還是陣列呢?:

陣列:這個字串就在堆疊裡

作為本地變數,空間會自動被**

指標:這個字串不知道在**

常用於處理引數、動態分配空間(如果你的字串是通過malloc得到的,那麼當然是應該要用指標)

構造乙個字串–>陣列

處理乙個字串–>指標

char是字串嗎?

·字串可以表達為char的形式,但是char不一定是字串

其本意是指向字元的指標,可能指向的是字元的陣列(如int),只有它所指的字元陣列有結尾的\0,才能說它所指的是字串

字串常量

「hello」

·它會被編譯器變成乙個字元陣列放在某處,這個陣列的長度是6,結尾還有表示結束的0

·兩個相鄰的字串常量會被自動連線起來

c語言程式設計學習之字串

字串字面量是一對雙引號括起來的字串行。當c語言編譯器在程式中遇到長度為n的字串字面量時,它會為字串字面量分配長度為n 1的記憶體空間。這塊記憶體空間用來儲存字串字面量中的字元,末尾再儲存乙個額外字元 空字元 空字元是乙個所有位都為0的位元組,用轉義字元 0表示。它標誌了字串的結束。我們知道print...

C程式語言 字串

標籤 空格分隔 c 9.1.2 字串 字串變數 9.1.3 字串 字串的輸入輸出 9.1.4 字串 字串陣列,以及程式引數 9.2.1 字串函式 單字元輸入輸出 9.2.2 字串函式 字串函式strlen 9.2.3 字串函式 字串函式strcmp 9.2.4 字串函式 字串函式strcpy 9.2...

學習筆記 C語言 字串陣列

1.使用場合 一維字元陣列中存放乙個字串,比如乙個名字char name 20 mj 如果要儲存多個字串,比如乙個班所有學生的名字,則需要二維字元陣列,char names 15 20 可以存放15個學生的姓名 假設姓名不超過20字元 如果要儲存兩個班的學生姓名,那麼可以用三維字元陣列char na...