在C里肛鹏,沒有JAVA里的String這個(gè)東西,用來表示字符串的脂矫,都是用char數(shù)組來表示
void main(){
? ?char str[] = { 'c','a','t',"\0" };
? ? printf("%s\n",str);
? ?str[0] = 'a';
? ?printf("%s", str);
? ?system("pause");
}
這是一種寫法枣耀,申明一個(gè)char數(shù)組,數(shù)組最后一位\0表示結(jié)束符庭再,如果沒有這個(gè)結(jié)束符捞奕,打印出來的東西,會(huì)有亂碼拄轻。 這種寫法缝彬,是可以改更字符串的。
當(dāng)然哺眯,下面介紹的寫法,是可以不要結(jié)束符的:
void main(){
? ?char str[4] = { 'c','a','t'};
? ?printf("%s\n",str);
? ?str[0] = 'a';
? ?printf("%s", str);
? ?system("pause");
}
這樣先定義好長度扒俯,并且大于實(shí)際的長度奶卓,就不會(huì)有亂碼。
當(dāng)然撼玄,還有一種更普遍的寫法
void main(){
? ?char* str = "helloWorld";
? ?printf("%s\n",str);
? ?system("pause");
}
通過指針夺姑,就更像是JAVA的寫法了。不用靠數(shù)組掌猛。且和int組數(shù)一樣盏浙,這個(gè)char字符串,在內(nèi)存上是線性連續(xù)的荔茬,由于char是一個(gè)字節(jié)废膘,故每個(gè)單詞的內(nèi)存地址都是向右移了一位。?
因此用指針的寫法慕蔚,是可以靠指針的加減法丐黄,來達(dá)到截取字符的,如
void main(){
? ?char* str = "helloWorld";
? ?str += 3;
? ?while (*str){
? ? ? printf("%c", *str);
? ? ? str++;
}
system("pause");
}
但這樣寫孔飒,是不能更改字符串的灌闺,就是不能有 str[0]='a';
故這里不需要更改字符時(shí),就用指針形式
如果需要更改坏瞄,就用數(shù)組形式
順便提一下桂对,如果只輸出一個(gè)char,則用的輸出符是,%c,若是數(shù)組鸠匀,則%s
再說兩個(gè)復(fù)制字符串的方法,在JAVA里面就是a+b蕉斜,在C中沒有這種搞法。具體方法如下
void main(){
? ?char dest[50];
? ?char* a = "china";
? ?char* b = "is powerful";
? ?strcpy(dest,a);
? ?printf("%s\n",dest);
? ?strcat(dest,b);
? ?printf("%s\n", dest);
? ?system("pause");
}
strcpy(dest,a); 就是將a字符串復(fù)制到dest中,但不保留dest原來的字符蛛勉。strcat鹿寻,就是復(fù)制,且保留原來的诽凌!就是作字符串的拼接毡熏。這樣最終輸出就是china is powerful
再說一下查找第一個(gè)字符的方法
void main(){
? ?char* a = "china";
? ?char* p=strchr(a,'i');
? ?if (p){
? ? ? printf("找到了,存在侣诵,內(nèi)存地址為%#x",p);
? ?}else{
? ? ? printf("沒有找到");
}
system("pause");
}
char* p=strchr(a,'i'); 就是找到字符數(shù)組中第一個(gè)含有i的指針痢法! 這里是存在的,故*p就是i