C語言不提供字符串數據類型,存儲和處理字符串時要借助於字符數組。隻要保證字符串是以空字符“\0”結尾,任何一維字符數組都可以用來存儲字符串。字符串變量可以在定義時進行初始化。例如:
charstr[]={H,e,l,l,o,\0};
這種初始化方法比較麻煩,C語言提供了一種快速初始化字符數組的方法:
charstr[]={"Hello"};
甚至可以把兩邊的花括號也省略掉:
charstr[]="Hello";
這裏“Hello”盡管看上去像一個字符串常量,但實際上並不是,它隻是第一種初始化列表的另一種寫法。編譯器會把“Hello”中的字符複製到字符數組str中,然後追加一個空字符,從而使字符數組str可以作為字符串來使用。
對於字符串,除了可以用數組名來引用和處理它以外,也可以用字符數組來存放,而用字符指針來處理。
[例109]輸出字符串。
voidmain()
{
charstr[]="Hello",*pstr;
pstr=str;
printf("%s\n",str);
printf("%s\n",pstr);
printf("%s\n",++pstr);
}
程序輸出結果:
Hello
Hello
ello
程序說明:
(1)從程序中可以看出,用數組名和字符指針變量都可以來引用字符串。
(2)字符指針變量可以移動,但數組名不可以。
若定義一個字符指針變量,並用字符串常量對它初始化,或者用字符串常量直接對它賦值。該字符串常量的首地址就存放在字符指針變量中。例如:
char*pstr="Hello";
等價於下麵兩行:
char*pstr;
pstr="Hello";
這裏定義了一個字符指針變量pstr,用來存放字符串常量“Hello”的首地址,而不是將字符串常量“Hello”放在字符指針變量pstr中。
[例1010]從給定的字符串“Helloworld”中取出子字符串“world”。
voidmain()
{
char*pstr="Helloworld";
pstr=pstr+6;
printf("%s\n",pstr);
}
運行結果為:
world
雖然字符數組和字符指針變量都能實現字符串的處理,但它們之間是有區別的,不能混為一談。如果需要修改字符串,那麼隻能定義字符數組來存儲字符串。
[例1011]將字符串a複製到字符串b中。
分析:字符串b是複製值,是字符串,所以必須定義為字符指針數組;而字符串a的值不會變,所以可以采用兩種方式來定義。