前言
这篇文章将要带我们去实现模拟一个stelen()函数
 首先我们要知道strlen()函数的定义
strlen()定义和用法
我们先看一下strlen在cplusplus网站中的定义
 链接: 点击跳转
 
 这里我们可以知道strlen的用法
size_t strlen ( const char * str );
获取字符串长度
 返回 C 字符串 str 的长度。
C 字符串的长度由终止 null 字符决定:C 字符串的长度与字符串开头和终止 null 字符之间的字符数(不包括终止 null 字符本身)一样长。
这不应与保存字符串的数组的大小相混淆。例如:
char mystr[100]=“test string”;
定义一个大小为 100 个字符的字符数组,但初始化 mystr 的 C 字符串的长度只有 11 个字符。因此,当 sizeof(mystr)的计算结果为 100 时,strlen(mystr) 返回 11。
- 字符串以 '\0'作为结束标志,strlen函数返回的是在字符串中'\0'前⾯出现的字符个数(不包含'\0')。
- 参数指向的字符串必须要以 '\0'结束。
- 注意函数的返回值为size_t,是⽆符号的
 (详细的size_t类型介绍可以看这篇文章【C语言】C\C++中的size_t类型)
这里补充一点
’\0‘的ASCLL码值为0
strlen()的模拟实现
知道了函数的定义和用法和上述的知识,就可以模拟实现了!
方法一:
首先我想到了第一种实现方法:
用计数器的方式实现
- 把字符串str传入我们的模拟函数my_strlen()中
- 定义一个计数器变量count用来记录只服从长度
- 循环遍历str(每一次count++并且str++)直到遇到‘\0'
- 最后返回count
代码
//计数器⽅式
int my_strlen(const char * str)//这里我们不会更改str所以加上const修饰
{
 int count = 0;
 assert(str);//断言 str不为空指针
 while(*str)
 {
 count++;
 str++;
 }
 return count;
}
方法二:
那不使用计数器还有其他方法可以实现吗?
 第二种方法我想到了递归
用递归的方法实现
- 我们每次传入my_strlen()函数str+1
- 判断*str是否为’\0‘是’\0‘返回0否则返回1+my_strlen(str+1)
代码
//不能创建临时变量计数器
int my_strlen(const char * str)
{
 assert(str);
 if(*str == '\0')
 return 0;
 else
 return 1+my_strlen(str+1);
}
方法三:
那除了这两种方法还有没有别的方法呢!!
 有!!
 用一个指针减去另一个指针
指针-指针 方法
- 在my_strlen()函数中定义一个指针p
- 给p指针赋值为str
- 循环遍历*p(每次p++)
- 这时循环结束p指针会指向字符串的最后位置(’\0')
- 用p指针减去str就是用p的地址减去str的地址最后得到字符串长度
代码
//指针-指针的⽅式
int my_strlen(char *str)
{
 assert(str);
 char *p = str;
 while(*p != ‘\0’ )
 p++;
 return p-str;
}
如此,我们就用了三种方法去模拟实现了库函数中的strlen函数
 如果有什么不足的地方,欢迎大家指正!
 ※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持



















