C言雅韵集:求字符串长度(strlen与sizeof)

一.简单介绍一下字符串 

1.字符串是由字符组成的序列,而字符可以是字母、数字、标点符号或其他符号。
712dff033d344bdc9c4b38805e3f1208.png2.字符串在c语言中可以用char类型的数组来存储,如右图。                                                                    

3.特别注意:在存储字符串数组时会默认字符串以\0结尾。我们可以利用这个特性来求字符串的长度,可以用监视查看arr数组的内容。

6feff677d0b34a33807f24a15a01f09f.png

二.用函数求字符串长度

1.编写函数来计算字符串长度

可以编写一个函数int类型Mystrlen,将字符串传递给函数进行简单的计算。编写这个函数也很简单,可以运用指针来完成,也可见简单的传参完成。

这是主函数

94e0412b37ba4dfc9b66e4f96ab3b664.png

my_strlen就简单列举一种吧:

df5d7035db01449bb7ca4f8a97f81f5e.png①指针:简单把arr的首元素地址传给了my_strlen函数,并声明初始化了一个整形变量count进行计数,用while循环判断字符串的元素是否是\0,是结束循环返回count,否count+1,继续循环。

三.利用strlen和sizeof求字符串长度。

1.strlen

①性质:

        strlen是一个库函数,需要引头文件<string.h>

②注意:

        strlen是从字符串的起始位置开始,到字符'\0',不包含'\0',只能用来计算字符串的长度。    

aca2e3f8a4d646b5a1291240bc3e61f5.jpeg

特别注意strlen的返回类型是size_t是无符号整数类型;

如果要实现判断两个字符串长度比较时不能用

strlen(arr1)-strlen(arr2)

875e50aaa9594138aad02e2bd31d250c.png

这个函数就不会输出理想的<。

那要怎么解决这个问题呢,可以直接比较

55333b63c85c4ce498d891880318a4dd.png

2.sizeof

①性质:

        sizeof是操作符。

②注意:

        sizeof用来获取数据类型或者变量所占字节数,sizeof会计算字符串中'\0',计算字符串长度时应该-1。

③使用案例

        sizeof 经常用来求数组的元素个数

5d0dc74c8664400da10deb1a085d0432.png

特别注意sizeof的返回类型也是size_t是无符号整数类型;

也会遇到相同的问题,有些程序员会写出下面的代码

6219875f1a5f4b198beba89e4326d69e.png

众所周知有符号与无符号作比较是和危险的行为,在某些编译器可能会报错。我们可以利用强制类型转化来解决这个问题,或者用宏来定义也是个不错的选择。

537fa1300e8a442aa3177986d33216e0.png

 

00e69ed4e53646899f5e45b44eb9d477.png

四.总结

参数类型char*                                     

变量、类型或表达式,适用于所有类型

 

 sizeofstrlen
定义库函数计算字符串长度(不包
括“0')
关键字,计算类型或变量所占内存
字节数
类型函数关键字/操作符
参数类型char*,必须指向以'0'结尾的字符串变量、类型或表达式,适用于所有
类型
返回值size t,字符串的实际字符数(不包括'0')size_t,类型或变量所占的字节数
对字符串的处 理计算字符串的实际字符数,不包括末尾的'0'对于字符串数组,计算整个数组所末尾的'0'占的字节数,包括末尾的"0'
对数组的处理数组名作为参数时退化为指向数组首元素的指针,无法直接获取数组大小数组名作为参数时不退化,直接返回整个数组所占的内存字节数
对指针的处理指针指向的字符串长度(不包括'0'),指针本身大小需用sizeof(指针类型)获取返回指针本身所占的字节数,与指针指向的内容无关
使用场景专门用于处理字符串,获取其长度适用于所有类型,用于获取内存占用情况
注意事项1.字符串必须以'0'结尾。2.返回值不包括字符串末尾的'0'。1.sizeof计算的是类型或变量所占的内存字节数,与变量的实际内容无关。2.对于结构体和联合体,sizeof的值可能受到字节对齐的影响。3.数组作为sizeof的参数时,不退化为指针。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值