一.简单介绍一下字符串
1.字符串是由字符组成的序列,而字符可以是字母、数字、标点符号或其他符号。2.字符串在c语言中可以用char类型的数组来存储,如右图。
3.特别注意:在存储字符串数组时会默认字符串以\0结尾。我们可以利用这个特性来求字符串的长度,可以用监视查看arr数组的内容。
二.用函数求字符串长度
1.编写函数来计算字符串长度
可以编写一个函数int类型Mystrlen,将字符串传递给函数进行简单的计算。编写这个函数也很简单,可以运用指针来完成,也可见简单的传参完成。
这是主函数
my_strlen就简单列举一种吧:
①指针:简单把arr的首元素地址传给了my_strlen函数,并声明初始化了一个整形变量count进行计数,用while循环判断字符串的元素是否是\0,是结束循环返回count,否count+1,继续循环。
三.利用strlen和sizeof求字符串长度。
1.strlen
①性质:
strlen是一个库函数,需要引头文件<string.h>
②注意:
strlen是从字符串的起始位置开始,到字符'\0',不包含'\0',只能用来计算字符串的长度。
特别注意strlen的返回类型是size_t是无符号整数类型;
如果要实现判断两个字符串长度比较时不能用
strlen(arr1)-strlen(arr2)
这个函数就不会输出理想的<。
那要怎么解决这个问题呢,可以直接比较
2.sizeof
①性质:
sizeof是操作符。
②注意:
sizeof用来获取数据类型或者变量所占字节数,sizeof会计算字符串中'\0',计算字符串长度时应该-1。
③使用案例
sizeof 经常用来求数组的元素个数
特别注意sizeof的返回类型也是size_t是无符号整数类型;
也会遇到相同的问题,有些程序员会写出下面的代码
众所周知有符号与无符号作比较是和危险的行为,在某些编译器可能会报错。我们可以利用强制类型转化来解决这个问题,或者用宏来定义也是个不错的选择。
四.总结
参数类型char*
变量、类型或表达式,适用于所有类型
sizeof | strlen | |
定义 | 库函数计算字符串长度(不包 括“0') | 关键字,计算类型或变量所占内存 字节数 |
类型 | 函数 | 关键字/操作符 |
参数类型 | char*,必须指向以'0'结尾的字符串 | 变量、类型或表达式,适用于所有 类型 |
返回值 | size t,字符串的实际字符数(不包括'0') | size_t,类型或变量所占的字节数 |
对字符串的处 理 | 计算字符串的实际字符数,不包括末尾的'0' | 对于字符串数组,计算整个数组所末尾的'0'占的字节数,包括末尾的"0' |
对数组的处理 | 数组名作为参数时退化为指向数组首元素的指针,无法直接获取数组大小 | 数组名作为参数时不退化,直接返回整个数组所占的内存字节数 |
对指针的处理 | 指针指向的字符串长度(不包括'0'),指针本身大小需用sizeof(指针类型)获取 | 返回指针本身所占的字节数,与指针指向的内容无关 |
使用场景 | 专门用于处理字符串,获取其长度 | 适用于所有类型,用于获取内存占用情况 |
注意事项 | 1.字符串必须以'0'结尾。2.返回值不包括字符串末尾的'0'。 | 1.sizeof计算的是类型或变量所占的内存字节数,与变量的实际内容无关。2.对于结构体和联合体,sizeof的值可能受到字节对齐的影响。3.数组作为sizeof的参数时,不退化为指针。 |