C字元陣列

2021-08-03 16:34:41 字數 2741 閱讀 7663

c語言

的運算子無法操作字串。在c語言中把字串當作陣列來處理,因此,對字串的限制方式和對陣列的一樣,特別是,它們都不能用c語言的運算子進行複製和比較操作。

1:字元陣列的賦值只能對其元素一一賦值。:2

一定要理解賦值與初始化的區別:

3:系統對字串常量也自動加乙個'\0'作為結束符,有了結束標誌'\0'後,字元陣列的長度就顯得不那麼重要了,在程式中往往依靠檢測'\0'的位置來判定字串是否結束,而不是根據陣列的長度來決定字串長度。

4:c語言並沒有提供可以直接操作字串的運算子;「=」可以用於其他資料型別的賦值,但是不可以直接給字串賦值

一:定義是初始化:

char test[10];

1、定義的時候直接用字串賦值

char test[10]="hello";  

在宣告中,=不是賦值運算子。

不能先定義再給它賦值,如char test[6; test[6]="hello";這樣是錯誤的!

2、對陣列中字元逐個賦值

char test[10]=;

char test[3]; test=//錯誤  不能先定義再給它賦值

char test[10]="hello";與char test[10]=; 的區別在於 

test[10]="hello";等價於

test[10]=;

c 語言規定了乙個「

字串結束標誌

」,以字元'

\0』代表。

3、對陣列省略陣列大小賦值

char test=;    

int testl[5]=; //error: 初始化值個數多於陣列元素個數

int test2[5]=; //error:初始化值不能省略

int test3[5]=; //error:初始化值不能省略

int test4[5]={}; //error:語法格式錯誤

char test; error   省略陣列大小只能在有初始化的陣列定義中。

int test[5]=; //正確

4:利用strcpy

char test[10]; strcpy(test, "hello");

5:易錯情況:

(1):char test[10]; test[10]="hello";

//error  乙個字元不能容納乙個字串且且test[10]也是不存在的,單個字元最大到test[0]--test[9]

(2):char test[10]; test="hello";//test是指標,它已經指向在堆疊中分配的10個字元空間,

現在這個情況test又指向資料區中的hello常量,這裡的指標test出現混亂,不允許!

(3):不能使用關係運算子「==」來比較兩個字串,只能用strcmp() 函式來處理

(4):

直接嘗試對字串進行複製或比較操作會失敗。例如,假定str1和str2有如下宣告:

char str1[10], str2[10];

利用=運算子來把字串複製到字元陣列中是不可能的:

str1 = "abc";     /*** wrong ***/      str2 = str1;       /*** wrong ***/

c語言把這些語句解釋為乙個指標與另乙個指標之間的(非法的)賦值運算

5:試圖使用關係運算子或判等運算子來比較字串是合法的,但不會產生預期的結果:

if (str1==str2) ...    /*** wrong ***/

這條語句把str1和str2作為指標來進行比較,而不是比較兩個陣列的內容。因為str1和str2有不同的位址,所以表示式str1 == str2的值一定為0。

6、字串處理函式

6.1 字串連線

char *strcat(char *str1,const char *2 );  

功能:函式將字串str2 連線到str1的末端,並返回指標str1

注:連線前兩個字串的後面都有乙個' \0 ',連線時將字串1後面的' \0 『去掉,只在新串最後保留乙個' \0 『

6.2 字串複製  

char *strcpy(char *strdestination,const char *strsource );  

功能:複製字串strsource 中的字元到字串strdestination,包括空值結束符。返回值為指標strdestination。

注:1、「字元陣列1」必須寫成陣列名形式,「字串2"可以是字元陣列名,也可以是乙個字串常量

2、複製時連同字串後面的' \0 ' 一起複製到陣列1中

3、不能用賦值語句直接將乙個字串常量或者字元陣列直接賦給乙個字元陣列(同普通變數陣列是一樣的),而只能用strcpy 函式處理。

4、可以用strcpy 函式將字串2中的前若干個字元複製到字元陣列1中去。

在c語言中我們也可以使用字元指標來儲存字串。

char* str="zifuchuanshuzu";
c語言對字串常量是按照字元陣列來處理的,在記憶體中開闢了乙個字元陣列用來存放字串常量,程式在定義字串指標變數str時,只是把字串首位址賦值給str。 

輸出:

printf("%s\n",str);
系統首先輸出str指向的字元,而後自加1,直至遇到』\0』;與陣列的輸出方式相同。

char *str;

str="zifuzhizhen";

對於字元指標這種賦值方式是正確的。與字元陣列不同。

c字元陣列

定義乙個長度為1000的字元陣列str 1000 在定義 i 0,cnt 0 cnt用來記錄單詞的個數 while str i n 既輸入回車時結束字元的輸入 str i 0 設定結束的標誌 for i 0 to str i 0 if str i str i 1 如果這個字元不為空格,並且下乙個字元...

C 字元陣列

array 直接初始化 char 陣列是特殊的,這種初始化要記得字元是以乙個 null 結尾的。include using namespace std intmain int len sizeof a1 sizeof a1 0 printf 陣列a1長度為 d n len char a2 liuke...

C語言 陣列(字元陣列)

軟體中,文字處理比數字處理更重要,而處理文字時需要用到字串,所以掌握字串的知識很重要。字串一定有 0 結尾,只有以 0 結尾的字元陣列才能稱為字串。0 是字串的標誌,也是字串結束的標誌。一 字串的定義 char arr 10 char brr 5 不是字串,沒有 0 char crr 5 最後乙個元...