1.字符串
char word[ ] = { 'H','e','l','l','o','!','\0'}; '\0'表示整數(shù)值的0
以0(整數(shù)0)結(jié)尾的一串字符场刑,0或 ‘\0’ 是一樣的索绪,但是和‘0’不同。
0 標(biāo)志字符串的結(jié)束,但它不是字符串的一部分捶码。計算字符串長度的時候不包含這個0。
字符串以數(shù)組的形式存在矿筝,以數(shù)組或指針的形式訪問(更多的是以指針的形式)猛们。
string.h 里有很多處理字符串的函數(shù)念脯。
C語言的字符串是以字符串?dāng)?shù)組的形態(tài)存在的。不能用運算符對字符串做運算弯淘,通過數(shù)組的方式可以遍歷字符串绿店。
唯一特殊的地方是字符串字面量可以用來初始化字符數(shù)組。以及標(biāo)準(zhǔn)庫提供了一系列字符串函數(shù)庐橙。
2.字符串常量(字面量)
“Hello” 會被編譯器變成一個字符數(shù)組放在某處假勿,這個數(shù)組的長度是 6,結(jié)尾還有表示結(jié)束的 0态鳖。
兩個相鄰的字符串常量會被自動連接起來转培。也可用反斜杠連接。
char *s="Hello,world!";?
s 是一個指針浆竭,初始化為指向一個字符串常量浸须。由于這個常量所在的地方(編譯器把字符串常量放在只能讀不能寫的地方),所以實際上 s 是 const char *s邦泄。
但是試圖對 s 所指的字符串做寫入會導(dǎo)致嚴(yán)重的后果删窒。
如果需要修改字符串,應(yīng)該用數(shù)組:char s[] = "Hello,world!";
3.指針還是數(shù)組顺囊?
char s[] = "Hello,world!";
數(shù)組:這個字符在這里易稠,作為本地變量空間自動被回收。
char *s="Hello,world!";
指針:這個字符串不知道在哪里(只讀)包蓝。只讀的不會去寫它驶社。
處理參數(shù)(數(shù)組作為函數(shù)參數(shù),用指針表達(dá)函數(shù)參數(shù))测萎,動態(tài)分配空間(字符串空間用malloc得到亡电,用指針)。
如果要構(gòu)造一個字符串:數(shù)組硅瞧。
如果要處理一個字符串:指針份乒。
4.字符串賦值?
char *t = "title"; char *s; s=t;
并沒有產(chǎn)生新的字符串腕唧,只是讓指針 s 指向 t 指向的字符串或辖,對 s 的任何操作就是對 t 做的。
5.字符串安全的輸入
char string[8]; scanf ("%7s",string);
在%和 s 之間的數(shù)字表示最多允許讀入的字符的數(shù)量枣接,這個數(shù)字應(yīng)該比數(shù)組的大小小1颂暇。多的內(nèi)容交給下一個scanf(%s讀到空格或者回車為止,讀入一個單詞)但惶。
6.常見錯誤
char *string; ? ?scanf("%s",string);
以為 char* 是字符串類型耳鸯,定義了一個字符串類型的變量 string 就可以直接使用了。
指針沒有初始化膀曾!
7.空字符串
char buffer[100] = ""; 這是一個空字符串县爬,buffer[0]=='\0'
char buffer[]=""; 這個數(shù)組的長度只有1!