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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)