入门第8天.
今天来学一下字符串~
先来看一下c语言中怎么来描述字符。
首先c语言中通过char字符类型来描述字符,同时也给了我们一种描述字符符号的形式'a';
而如果我要去把这个字符常量存起来,就可以使用如下格式:char ch = 'a';这样就可以把这么一个字符常量放到字符变量里面储存起来。
假如说现在我有abcdef这么一堆字符,我想把这一串字符,都给储存起来。
而像这样"abcdef";有一对双引号括起来的一串字符就叫字符串。
那么有人就可能会问了,既然c语言中有字符类型char,那么有没有可能存在字符串类型呢?
答案是没有。
像"abcdef"这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
那如果我想把字符串存储起来该怎么办呢?
答:可以把它放到一个字符数组里去。
eg.
如图中第1行所示,就可以这样把它放到这个数组里去。表示这个char类型的数组里面可以放十个元素。
也可以像图中第三行直接不写数组内能放的元素数,也就是当不知道后面大小的情况下,不填写数组内能放的元素,此时数组会自己根据后面元素的情况去开辟储存空间。
或者像第五行一样直接把能存放元素数写大点,便可确保这一字符串可以存入。
而在VS2019版本下如果想查看arr这个数组里存放了什么东西,可以按如下操作:
调试——窗口——监视——随便哪个监视窗口
打开以后在监视项中输入arr便可查看arr这一数组中存放的元素。
结果发现一共存储了7个元素,最后一个是\0,但我们在原本存入的字符串中并没有\0.
实际上,字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串内容,但他会占存储空间。
所以实际上要存储“abcdef”这六个字母的字符串,对应的char[]的[]中至少为7,因为还要包括\0
但如果不用字符串而将字母一个个单独放入的话就只存储了六个元素,如图。
这是这两种不同方式形式上的差异,使用起来也是有差异的。
当时用printf("%s\n",arr)来打印结果时,单独录入字母而没有\0的这组就可能会出现一些奇怪的结果,比如这样:
可以看到arr1打印的毫无问题
但arr2后面跟了个不知道什么鬼东西。原因是arr1中有\0,所以到这里就终止了,也只会输出abcdef,但在arr2中程序打印完abcdef后没有找到\0,所以只能一直往后打印直到遇到\0才会终止打印。
所以如果在{'a','b','c','d','e','f'};后再多加一个'\0'的话就会和arr1一样正常的停在abcdef并打印出来了。
这也再次说明了字符串的结束标志是一个\0的转义字符。
再来介绍一下一个新的库函数:strlen,写全了是string length,意思是求字符串长度。
其头文件是string.h
这样写:strlen(arr),便可求出arr字符串的长度。
而要把求出的结果反馈给自己需要如下代码:(不然我求了值我却看不到结果那我岂不是看了个寂寞?!)
int len = strlen("abc");
或者直接printf("%d\n",strlen(arr)):
我们也可以看出strlen在求字符串长度时并不计入\0
今天的内容就这么多啦,明天学习转义字符~