字符串与字符
“” ‘’
%s %c
\0
字符串 | 字符 |
---|---|
" " | ’ ’ |
%s (printf(s)) | %c |
\0结尾 长度+1 | |
本质是字符数组 |
字符串初始化 |
---|
char s[6] = {‘h’,‘e’,‘l’,‘l’,‘o’,’\0’}; |
char s[6] = “hello”; |
char s[6] ={ “hello”}; |
char *s = “hello” |
1
字符串面量 是常量
注意:
char s[20]
这种形式,声明了大小——20个char
char *s——字符指针,内存只有char
2
对于printf 最重要的是字符串起始地址,知道了起始地址,读到\0结束。
字符串数组 |
---|
char name[][] = {“zs”,“ls”,“ww”} ; |
char *name[] = {"","",""} |
- strcat 拼接
错误:
char *s1 = "good";
char s2[8] = "morning";
printf("%s",strcat(s1,s2));
原因:指针没有获取足够内存保存
正确 :
char s1[5] = "good";
char s2[8] = "morning";
printf("%s\n",s1); //good
printf("%s\n",s2); //morning
printf("%s\n",strcat(s1,s2)); //goodmorning
printf("%s\n",s1); //goodmorning
printf("%s\n",s2); //ng
\0能覆盖了
strcat(a,b):连结字符串,把b连接到a上,改变了a
- strcpy
char s1[5] = "good";
char s2[8] = "morning";
printf("%s\n",strcpy(s1,s2)); //morning
printf("%s\n",s1); //morning
原来函数被完全覆盖掉
- strcmp
char s1[5] = "good";
char s2[8] = "morning";
char s3[8] = "morning";
printf("%d\n",strcmp(s1,s2)); //-6
printf("%d\n",strcmp(s3,s2)); //0
- strlen
char s1[5] = "good";
char s2[8] = "morning";
printf("%d\n",strlen(s1)); //4
printf("%d\n",strlen(s2)); //7
- struper strlwr
- sprintf
char s[10];
char s1[4] = "wow";
char s2[4] = "kik";
//sprintf
sprintf(s,"aa");
printf("%s\n",s); //aa
sprintf(s,"%s %s",s1,s2);
printf("%s\n",s); //wow kik
用处:
int i;
char *name[6] = {"wmy","ss","wmw","ki","ko"};
char str[100];
for(i=0; i<5; i++){
sprintf(str, "%s %d",name[i],i);
printf("%s\n",str);
}
/*
wmy 0
ss 1
wmw 2
ki 3
ko 4
*/