字符串的长相
"hello world!"!
这样一串**使得程序员诞生的代码**,就是字符串
字符串的特点
我么来看看它的特点,首先它拥有的不是一个元素,还有被双引号包裹着 没错,这种由双引号引起来的一串字符称为字符串字面值,或者简称**字符串**
注:字符串的结束标志是一个**\0的转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串内容**
字符串的储存
c语言中没有专门存储字符串的类型 我们可以用字符数组来进行存储
#include <stdio.h>
int main()
{
char arr[] = "abcdef";
return 0;
}
我们用调试来观察一下它拥有几个元素 在调试监视中,我们可以看到这个数组拥有7个元素,包括\0,这说明字符串在结尾的时候隐藏了一个\0(\0是字符串的结束标志) ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dhtGEC1R-1639578527812)(C:\Users\fmshixiang\AppData\Roaming\Typora\typora-user-images\image-20211215184110898.png)]](https://img-blog.csdnimg.cn/5e442656aa2a4c4b8dbea9274d9d2c09.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiA6LW35oWi5oWi5Y-Y5by6,size_13,color_FFFFFF,t_70,g_se,x_16)
\0在字符串中的作用
通过printf来探查字符串中\0的作用
我们先创建两个字符数组 (""括起来的是字符串,’'括起来的是字符,%s表示的是打印字符串)
#include<stdio.h>
int main()
{
char arr1[] = { "hello world!\n" };
char arr2[] ={'h','e','l','l','o',' ','w','o','r','l','d','!','\n' };
printf("%s", arr1);
printf("%s", arr2);
return 0;
}
我们将程序执行起来发现 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIuoYcir-1639578527814)(C:\Users\fmshixiang\AppData\Roaming\Typora\typora-user-images\image-20211215220937338.png)]](https://img-blog.csdnimg.cn/9acab21376a14d4d9783b801c82bf064.png)
数组arr1打印出来正常,而**数组arr2打印出来的结果后面有一串乱码**
这是由于我们使用了%s进行打印,%s是用来打印字符串的,当我们打印字符串的时候,需要找到\0(字符串的结束标志),才会停止打印,而**arr2中没有\0,所以printf会一直往后面打印,直到找到\0为之**
通过strlen来探查字符串中\0的作用
我们对上面代码进行了改进
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = { "hello world!\n" };
char arr2[] = { 'h','e','l','l','o',' ','w','o','r','l','d','!','\n' };
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
return 0;
}
打印出来的结果为13和46,arr2为随机值,这是因为arr2没有\0,所以一直读取字符直到读取到\0
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evMsj66Q-1639578527815)(C:\Users\fmshixiang\AppData\Roaming\Typora\typora-user-images\image-20211215222521154.png)]](https://img-blog.csdnimg.cn/31c9c9e442cd4d2db90f91f3b59fda29.png)
|