字符串

字符串即一串字符。单括号括起来的是字符,双括号括起来的就是字符串

如何描述字符串

1
2
3
4
5
int main()
{
"abcdef"; //字符串
return 0;
}

提前需要注意的是,字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候,\0因为是结束的标志,因此不算做字符串的内容

证明字符串的内容都是字符 与 \0算作元素

因为数组表示的是一组相同类型元素,所以我们在这里可以选择使用字符数组来证明

首先将字符串存到字符数组中

1
2
3
4
5
int main()
{
char arr[] = "abcde";//[]不填写,会自动根据后续内容进行初始化
return 0;
}

按下F10进行调试,之后再监视arr

根据右侧监视的结果我们发现有0~5,一共6个元素,是因为字符串在结尾隐藏了一个\0

\0的重要性 与 \0是字符串中止的证明

\0的主要作用就是进行一个终止读取的作用及时折损

1
2
3
4
5
6
7
8
9
int main()
{
char arr1[] = "abc"; //字符串
char arr2[] = {'a','b','c'}; //字符

printf("%s\n", arr1); //%s是打印字符串用的
printf("%s\n", arr2);
return 0;
}

arr1是正常的但是arr2出现了乱码是为什么呢?

乱码

通过画图可以方便我们对内存空间进行理解,如下图所示

而出现乱码的原因就是,由于没有终止符号就会一直读取未知信息,产生乱码

如何解决呢?很简单可以在后面直接手动输入一个\0

1
2
3
4
5
6
7
8
9
int main()
{
char arr1[] = "abc";
char arr2[] = {'a','b','c','\0'};

printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}

这样就不会出现乱码了

现在已经知道了\0会算作一个元素个数,那么怎么证明其不算作字符长度呢?

\0不算作字符长度

证明之前还是来简单介绍一个新的函数,来辅助证明

strlen()函数

strlen()函数,全称是string length,它直接在()内填写,可以求字符串的长度,但是求完长度后会直接返回

因此在使用这个函数的时候可以在前面打上int len就可以解决

但是在使用这个函数是会有头文件报错,因此还需要在头文件上加上#include <string.h>

回到证明

1
2
3
4
5
6
int main()
{
int len = strlen("abc");
printf("%d\n",len);
return 0;
}

结果显然是3,因此足以证明\0会算作一个元素个数,但其不算作字符长度

拓展

如果要是输入字符会strlen()函数会怎么样?来试验一下

1
2
3
4
5
6
7
int main()
{
char arr2[] = {'a','b','c'};

printf("%d\n", arr2);
return 0;
}

结果如图,这个数字很奇怪,是为什么呢?

因为strlen()在求算字符长度是,得出的结果是随机值,多按几次F5就会发现每次的结果都是不一样