在c語言中,字串是當做字元陣列來處理的;所以字串有兩種宣告方式,一種是字元陣列,一種是字元指標。
(1)直接逐個初始化字元陣列:字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。
char str[10]=;
注意:如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理;若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定為空字元(即'\0' )。
(2)用字串常量來初始化字元陣列:在c語言中,將字串作為字元陣列來處理。因此可以使用字串來初始化字元陣列。
也可以省略花括號:
但是,上述這種字元陣列的整體賦值只能在字元陣列初始化時使用,不能用於字元陣列的賦值,字元陣列的賦值只能對其元素一一賦值,下面的賦值方法是錯誤的。
char str;
這是字元陣列初始化的兩種方式,但是這兩種方式其實是不等價的;他們的陣列長度不同。
#includeint main()執行結果:; //等價於charr
char charr_test = ;
int num_parr = sizeof(parr);
int num_charr = sizeof(charr);
int num_charr_test = sizeof(charr_test);
printf("the parr is : %s\n", parr);
printf("the size of parr is : %d\n\n", num_parr);
//與charr不等價
printf("the charr is : %s\n", charr);
printf("the size of charr is : %d\n\n", num_charr);
//等價於charr
printf("the charr_test is : %s\n", charr_test);
printf("the size of charr_test is : %d\n", num_charr_test);
return 0;
}
從結果可以看到第二種初始化方式,列印的結果有問題,但是字元數量沒有問題。這是因為字串預設是以』\0』結束的,第二種初始化方式中沒有』\0』,而我們以字串方式列印,所以出錯;
第一種是系統自動新增了』\0』;我們可以看到其字元數量是15(與第三種相同)。
(3)字元指標:在c語言中我們也可以使用字元指標來儲存字串。
字元指標初始化:
char* str="zifuchuanshuzu";
c語言對字串常量是按照字元陣列來處理的,在記憶體中開闢了乙個字元陣列用來存放字串常量,程式在定義字串指標變數str時,只是把字串首位址賦值給str。
輸出:
printf("%s\n",str);
系統首先輸出str指向的字元,而後自加1,直至遇到』\0』;與陣列的輸出方式相同。
字元指標的賦值:
char *str;
str="zifuzhizhen";
對於字元指標這種賦值方式是正確的。與字元陣列不同。
(1)char *strcpy(char *dest,const char*src);
標頭檔案:string.h和stdio.h
注: 字元陣列dest必須是陣列名形式,src可以是陣列名也可以是字串常量 可以用strcpy將src的前若干個字元複製到字元陣列中.
(2)char *strcat(char *dest,const char *src);
標頭檔案:string.h
功能: 把src中的內容複製到dest結尾處(覆蓋』\0』)。
注: src和dest記憶體區域不可以重疊,dest必須有足夠的空間來容納src; 字元陣列dest必須是陣列名形式,src可以是陣列名也可以是字串常量; 返回指向dest的指標;
#include#includeint main()
結果:
(1)在c語言中並沒有直接提供字串的操作,其字串操作是通過轉化為字串完成的,例如字元陣列,字元指標,其本質是對字元的操作。
(2)作為字元陣列,與普通陣列相同,區別在於它的每乙個元素是乙個字元,所以不可以直接用「=」對字元陣列賦值(parr=」zhifushuzu」,是錯誤的賦值方式),但是可以對每乙個元素進行賦值(charr[12]=』\0』是正確的)。
(3)字串一定是以』\0』結尾的;字元陣列和字元指標我們當做字串整體初始化,系統會自動新增』\0』;對於字元陣列,如果採用單個字元的方式進行初始化或者賦值一定要考慮結束符』\0』.
(4)strcpy和strcat內部也是對字元的操作,以『\0』作為字串結束的標誌。
C語言中字元陣列的初始化與賦值
在c語言中,字串是當做字元陣列來處理的 所以字串有兩種宣告方式,一種是字元陣列,一種是字元指標。char parr zifuchuanshuzu char charr 這是字元陣列初始化的兩種方式,但是這兩種方式其實是不等價的 他們的陣列長度不同。include int main 等價於charr ...
字元陣列初始化與賦值
char a 10 怎麼給這個陣列賦值呢?1 定義的時候直接用字串賦值 char a 10 hello 注意 不能先定義再給它賦值,如char a 10 a 10 hello 這樣是錯誤的!2 對陣列中字元逐個賦值 char a 10 3 利用strcpy char a 10 strcpy a,he...
陣列的初始化與賦值
以乙個整型陣列和乙個char型陣列為例 int a 2 char s 5 這樣初始化時可以的,使用cout輸出s陣列的時候,不報錯,但直接使用s這個陣列名輸出缺少了乙個適當的 0 結尾 對比上面的初始化,只能對陣列的元素賦值,而不能用賦值語句對整個陣列賦值 c 程式設計 譚浩強 149頁 例如下面是...