一、C语言是使用字符类型数组来实现字符串的 char name[10] = “jack”; //等同char name[] = “jack”; //等同char name[10] = {‘j’, ‘a’,‘c’, ‘k’, ‘\0’}; //或char name[10] = {‘j’, ‘a’,‘c’, ‘k’, 0}; //name数组长度为10,实际占了5个字节,分别为j、a、c、k、\0,\0的ASCII //码为0,可以使用ASCII码值代替字符 printf(name); //printf默认只接收常量字符串,放变量编译会警告,但可以通过 char name2[] = {‘i’, ‘t’}; //不能当作字符串来用,因为没有结束符号\0,所以这只是一个字符类型数组 二、输出字符串 int main() { char name[] = “itcast”; printf(“我在%s上课\n”, name); } 三、修改字符串中的某一位字符 char name[] = “itcast”; //等同char name[] = {‘i’, ‘t’, ‘c’, ‘a’, ‘s’, ‘t’, ‘\0’}; name[3] = ‘H’; 四、\0的作用 \0是字符串结尾的标示符 int main() { char name[] = “it”; //字符串 char name2[] = {‘o’, ‘k’}; //这仅仅是一个字符数组,因为没有结束符号”\0”或0 printf(“%s\n”, name); //输出的是it (name作为字符串传给函数printf) printf(“%s\n”, name2); //输出的是okit (name2作为数组指针传给printf函数,printf函数中规定输出字符串,遇到”\0”结束输出)原因见下图,内存示意 } 如上图内存示意图可知,从地址ffc4开始输出,一直到ffc8结束 如果name字符串中含有字符”\0”,比如name为”itc\0ast”,那么printf(“%s\n”, name2);会输出okitc,遇到第一个”\0”结束输出。 五、strlen函数 头文件#include <string.h> strlen 区别于 sizeof,因为strlen不计算\0,而sizeof计算\0 strlen计算的是不带\0的字符数,sizeof计算的是带\0的字节数 #include <string.h> #include <stdio.h> int main() { int size = strlen(“haha”); printf(“%d\n”, size); //输出为4 return 0; } int main() { char name[] = “itca\0st”; int size = strlen(name); printf(“%d\n”, size); return 0; } 上面的代码中输出的是4,所以可以看出strlen()函数的原理是从数组name的地址开始计算到\0结束的长度 六、输出字符串中某一个字符 int main() { char name[] = "itcast"; printf("%c\n", name[4]); //输出为s,字符串就是一个字符数组,最后一位为”\0” } 七、字符串数组 #include <string.h> #include <stdio.h> /* 字符串数组即字符型二维数组 */ int main() { char name1[] = "jack"; char name2[] = "rose"; char names[2][10] = {"jack", "rose"}; //等同于下边的写法 /* char names[2][10] = { {'j', 'a', 'c', 'k', '\0'}, {'r', 'o', 's', 'e', '\0'} } */ printf("%s\n", names[1]); //输出第二个字符串 return 0; } |