目录
一.概念引入
二.字符串(数组存储,必须以'\0'结尾)
三.错误示范
四.strlen()和sizeof()相对于字符串的不同
一.概念引入
“a”,'a'哪个是字符哪个又是字符串,嘿嘿不用猜了
我们在上一章中说过,字符的形式就是单引号里面有一个字符。那么“a”就是我们本章的主角,字符串了。
如果非要说字符串和字符除了用双引号和单引号区别外,那就是“a”其实有两个字符,一个'a',还有一个'\0'.
而'\0‘就是判断字符串的关键。printf函数根据判断'\0'的位置来确定字符串的结束。
下面我们就来详细进行学习吧
二.字符串(数组存储,必须以'\0'结尾)
C语言没有专门用于存储字符串的变量类型,所以字符串其实就是被存储在char类型的数组中。而数组就是在内存当中连续存储单元组成的一块空间。
如int a[2],这里的a就是两个在内存当中相邻的int数据元素空间的集合。可以存储两个int数。数组的具体内容我们也会在后面讲解的
这里我们想要存储helloworld这个字符串。
1.第一步我们要先确定存储数组的大小。我们在上面讲过,字符串都是以\0结束的,所以想要存储helloworld字符串,就必须把helloworld变为helloworld\0形式存储在数组中。
而如果变呢,其实很简单直接用scanf输入的时候,scanf会自动在字符串后面加入\0。或者我们赋值也可以。编译器都会自动帮我们在字符串最后面加上\0。
也正因为每个字符串后面都会多一个\0,这就要求我们在事件存储字符串时,空间需要多分配一个出来
2.helloworld一共有10个字符,在加上\0,所以我们就需要设置一个有11个空间的数组。下面我们来看示范
三.错误示范
上面说过,不管时直接赋值还是通过scanf赋值,字符串后面都会自动加上\0。那么如果我们把这个\0去掉后会发生什么情况呢,下面我们来看下。
这里我们通过修改数组中的值的方式把字符串最后的\0换成了‘1‘。我们看到运行结果ch_1的字符串后没有停止,为啥呢因为系统是通过\0来判断字符串输入结束的。原来的\0没有了,我们先输入了一段红下划线那部分内存中其他的值,一直到ch_2字符串的位置也没停止,直到黄色下划线部分,终于在9后面的第二个字符发现了\0字符。最后输出停止。
四.strlen()和sizeof()相对于字符串的不同
strlen函数主要是求字符串字符数量的(不包括\0)。这里有了解sizeof的朋友想问了。那一个char就是一个字节,直接把字符串数组传到sizeof不是也可以得到字符串的数量吗?那下面我们来看实例。稍好详细讲解
这里我们分别了两个字符数组,它们的字符串内容一样,所以最后我们看到strlen的结果都是一样的。但是这两个字符数组的大小是不一样的。我们给ch_1申请了11个char大小的空间,所以sizeof最后值为11。而ch_2我们申请了40个char大小的空间,所以sizeof的值为40;
根据这个结果我们可以得到strlen获得的是字符串的长度(不包括\0)。而sizeof获得的是内存空间大小。而不仅仅是字符串大小。
好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈