C语言 - 字符串和strlen | strcpy | strcat | strcmp

字符串

1 - 字符串一定以 \0 结尾,它实质上是字符数组

printf("mark\n");// 字符串常量实质是 'm'+'a'+'r'+'k'+'\0'组成 

2 - 通常使用字符数组来存储字符串

char name[10] = "Bruce";// 在指定大小时,要确保数组的大小比预定的大一个,因为编译器会自动添加 '\0'
printf(name);// 以该形式输出,实际上是通过数组来访问字符串,会有警告。因为默认情况下 printf 函数只接受字符串常量作为参数,而对变量并未写明

3 - 字符串的声明方式

1 // 方式一
2 char name[8] = "yang";
3 printf("%s\n",name);
4 // 方式二
5 char nameL[30] = {'y','a','n','g','\0'};// 标志结束的空字符:若没有它,得到的只是一个字符数组而不是字符串
6 printf("%s\n",nameL);
7 // 方式三
8 char nameY[50] = "hello,and " "how are " "you\n";// 若字符串文字中间没有间隔或间隔的是空格符,编译器会将其串联起来
9 printf("%s\n",nameY);

测试一:会输出什么

char name[] = "yang";
char name2[]={'o','k'};
printf("name2=%s\n",name2);

测试二:又会输出什么

char name[] = "y\0ang";
char name2[]={'o','k'};
printf("name2=%s\n",name2);

测试三:继续猜

char name[] = "y\0ang";
char name2[]={'o','k'};
printf("name = %s\n",name);

说出结果之前,咱们事先分析下内存状况

测试一输出  name2 = okyang

测试二输出  name2 = oky

测试三输出  name = y

字符串常用函数

1 - strlen:计算字符串的长度但不包括 \0,是字符数的和

printf("%lu\n",strlen("hot\0sexy"));   // \0 截断,输出 3   
printf("%lu\n",strlen("Keely H"));// 输出 7(空格也是字符)
printf("%lu\n",strlen("姬莉 哈泽尔"));   // 输出 16:一个汉字占三字节

计算数组长度使用 sizeof 关键字:sizeof(数组名) 除以 sizeof(数组类型)

2 - strcpy:字符串拷贝

char e[50] = "Chrissy Costanza";
char s[50] = {0};
strcpy(s,e);
printf("%s\n",s);// Chrissy Costanza
char strings01[3][10]= {"iphone","itouch","ipad"}; // 二维数组
strcpy(strings01[0], "mac book");
printf("%s\n",strings01);   // mac book
strings01 [0][2]='d';
printf("%s\n",strings01[0]);// mad book

3 - strcat:字符串拼接

char y[100] = "Hot girl is ";
char ss[] = "Cos";
strcat(y,s);    // y + ss
printf("%s\n",y);// Hot girl is Cos

4 - strcmp:比较

char yy[100] = "Hot girl is ";
char xx[] = "Cos";
int n = strcmp(xx,yy);
int m = strcmp(yy,xx);
int p = strcmp(yy,yy);
printf("strcmp(xx,yy) == %d\n   strcmp(yy,xx) == %d\n       strcmp(yy,yy) == %d\n",n,m,p);
// strcmp(xx,yy) == -5
// strcmp(yy,xx) == 5
// strcmp(yy,yy) == 0

 

posted on 2017-08-02 11:57  低头捡石頭  阅读(32)  评论(0编辑  收藏  举报

导航