C語言字元數組的初始化
1、字元數組的定義與初始化
(1),第一種方式:
char str[10]={ \'I\',\' \',\'a\',\'m\',\' \',‘h’,\'a\',\'p\',\'p\',\'y\'};
即把10個字元分别賦給str[0]到str[9]10個元素
注意:如果花括号中提供的字元個數大于數組長度,則按文法錯誤處理;若小于數組長度,則隻将這些字元數組中前面那些元素,其餘的元素自動定為空字元(即\'\0\' )。
(2),第二種方式:
char str[ ]={"I am happy"};
或者:
char str[ ]="I am happy";
注意:上述這種字元數組的整體指派隻能在字元數組初始化時使用,不能用于字元數組的指派,字元數組的指派隻能對其元素一一指派,
下面的指派方法是錯誤的
char str[ ];
str="I am happy";//錯誤,字元數組的指派隻能按元素一一指派
注意:數組str 的長度不是10,而是11,這點請務必記住,因為字元串常量"I am happy"的最後由系統自動加上一個\'\0\'。
(3),上面的初始化與下面的初始化等價
char str[ ]={\'I\',\' \',\'a\',\'m\',\' \',\'h\',\'a\',\'p\',\'p\',\'y\',\'\0\'};
而不與下面的等價
char str[ ]={\'I\',\' \',\'a\',\'m\',\' \',\'h\',\'a\',\'p\',\'p\',\'y\'};
前者的長度是11,後者的長度是10.
說明:字元數組并不要求它的最後一個字元為\'\0\',甚至可以不包含\'\0\',
向下面這樣寫是完全合法的。
char str[5]={\'C\',\'h\',\'i\',\'n\',\'a\'};
可見,用單個字元給字元數組初始化,系統不會在後面加\'\0\',當以字元串形式初始化時系統才會在後面加\'\0\'。
2、字元串的表示形式
在C 語言中,可以用兩種方法表示和存放字元串:
(1),用字元數組存放一個字元串
char str[ ]="I love China";
(2),用字元指針指向一個字元串
char* str="I love China";
(3),兩種表示方式的字元串輸出都用
printf("%s\n",str);
說明, 對于第一種表示方法,字元數組名即是字元數組的首位址,與第二種中的指針意義是一緻的,系統先輸出它所指向的一個字元資料,然後自動使str 自動加1,使之指向下一個字元,如此,直到遇到字元串結束辨別符" \0 "。
3,字元指針變量和字元數組
雖然用字元數組和字元指針變量都能實作字元串的存儲和運算。字元數組由若幹個元素組成,每個元素放一個字元;而字元指針變量中存放的是位址(字元串/字元數組的首位址),絕不是将字元串放到字元指針變量中(是字元串首位址)。
4,字元指針變量和字元數組指派方式:
對字元數組隻能對各個元素指派,不能用以下方法對字元數組指派
char str[14];
str="I love China"; //錯誤,不是初始化,這是指派,隻能一一進行。
(但在字元數組初始化時可以,即char str[14]="I love China";)
而對字元指針變量,采用下面方法指派:
char* a;
a="I love China";//指針指派,可以
或者是char* a="I love China"; 都可以
注意:如果定義了一個字元數組,那麼它有确定的記憶體位址,不能進行多次指派;而定義一個字元指針變量時,它并未指向某個确定的字元資料,并且可以多次指派。
5,字元串處理函數
(1), 字元串連接配接
char *strcat(char *str1,const char *2 );
char *strcat(char *strDestination,const char *strSource );
功能:函數将字元串str2 連接配接到str1的末端,并傳回指針str1
注:連接配接前兩個字元串的後面都有一個\' \0 \',連接配接時将字元串1後面的\' \0 ‘去掉,隻在新串最後保留一個\' \0 ‘
(2), 字元串複制
char *strcpy(char *str1,const char *2 );
char *strcpy(char *strDestination,const char *strSource );
功能:複制字元串strSource 中的字元到字元串strDestination,包括空值結束符。傳回值為指針strDestination。
注意:
1、“字元數組1”必須寫成數組名形式,“字元串2"可以是字元數組名,也可以是一個字元串常量
2、複制時連同字元串後面的\' \0 \' 一起複制到數組1中
3、不能用指派語句直接将一個字元串常量或者字元數組直接賦給一個字元數組(同普通變量數組是一樣的),而隻能用strcpy 函數處理。
4、可以用strcpy 函數将字元串2中的前若幹個字元複制到字元數組1中去。
