C C 字串和字元陣列

2021-09-30 04:38:22 字數 1948 閱讀 5974

c語言中沒有專門的字串變數,如果要將乙個字串存放在變數中,必須使用字元陣列,即用乙個字元型陣列來存放乙個字串,陣列中每乙個元素存放乙個字元。

<1> 定義: char c[10]

字元型與整型互相通用,因此 int c[10] 也可以定義字元陣列。但由於兩種型別分配位元組不同, 用整型來定義會浪費空間, 另外這樣定義實際意義也不大, 只是為了說明其合法性。

<2> 初始化: 

最簡單的方法即逐個賦值: char c[10]=; 10個字元分別賦紿c[0]到c[9]10個元素。

如果初值個數小於陣列長度,則只將這些字元賦紿陣列中前面的元素,其餘元素自動定為空字元(即'/0')。

如char c[12]=; 則c[10]、c[11]值都為'/0' 。

注意此時陣列的長度不是10,而是11,因為系統自動加上了'/0'結束符。

字元陣列不要求最後乙個字元為'/0',而為了使處理字元陣列和字串的方法一致,便於測定字串的實際長度,能及方便在程式中處理, 在字元陣列末尾也常加上乙個'/0'。

<3> 字元陣列的輸入輸出 

(1) 逐個字元輸入輸出。用格式符"%c"輸入或輸出乙個字元。

(2) 將整個字串一次輸入或輸出。用"%s"格式符,意思是輸出字串(string)。例如:

char c=;

printf("%s", c);

如果乙個字元陣列中包含乙個以上'/0',則遇第乙個'/0'時輸出就結束。

(3) 若輸入字串長度超過字元陣列所定義的長度時,將造成陣列下標越界,但系統對此並不報錯。

(4) 用%s格式輸入字元時,遇空格、tab鍵和回車將自動結束輸入。

用scanf函式輸入時, 遇到空格則認為乙個字串結束。試驗如下:

#include

int main()

執行結果:

******************************==

how are you↙

how are you

******************************==

#include

int main()

執行結果:

******************************==

how are you?↙

how******************************==

由第二個程式可知,實際並未將這12個字元加上'/0'送到陣列str中,而是將空格前的字元"how"送到str中,將其視為字串處理,在其後加上'/0' 。 ★

c語言中陣列名代表該陣列的起始位址。

補充:

1.sizeof(s),得出的長度不同。

對於字串得到的是指標型別的長度(為4)。

對於字元陣列得到的是字元陣列的長度。

2.char* s=」hello」;

s[0]='a';//wrong!執行時顯示為「段錯誤」。

字元陣列是可以修改的。

3.作為返回值時不同。

char* test();//gcc 會警告:返回區域性變數。

return ch;

} 這個函式是錯誤的,因為字元陣列ch是區域性變數,當test呼叫結束是占用的空間將被釋放。

改為:static char ch[5]=;

或: char* ch=」hi」;

就可以了。

4.宣告外部變數時,字元陣列和字串為不同型別。

file1.中:char version=」2.12」;

file2. : char* version=」2.12」;

file3. : extern char* version;

實際上,file3中version只能引用file2中的值,而引用file1中的 version時導致型別衝突。

C C 字串常量 字元陣列和字元指標

通常,如果在程式中定義了乙個字串,那麼為了節省記憶體,會把相同的字串儲存到乙個單獨的 相同的位置,此時如果用多個字元指標指向它,那麼指標的值會相同。常量字串位於c c 的文字常量區,在程式結束以後由系統釋放。char p string1 example char p string2 example ...

C C 字元陣列 字元指標和字串常量

c 有兩種處理字串的方式,除了沿用c風格字串,另一種方法是借助用string class庫。字串是一系列儲存在連續記憶體位元組中的字元 每個字元對應乙個位元組 所以可以將字串儲存在字元陣列中。以下四種宣告方式都是字元陣列,但是只有第乙個不是字串,其中無效字元 null character 0 其在機...

字串和字串陣列

字串陣列 include int main int argc,const char ar printf name1 s n name1 name1 zhangsan 部分初始化中,沒有被初始化的元素預設是0,0 對應的ascii值是 0 char name2 9 printf name2 s n n...