🌞各位看官:欢迎来到(每日小知识)
🌟建议订阅专栏--> 每日小知识
🌟也欢迎关注小编--> 小峰同学
赶快上🚌跟着小编每天进步一点点,开心学习每一天。
😘如果觉得小编的文章对你有帮助,可以一键三连支持小编
😍你的支持才是小编最大的动力
👻本期重点:strlen函数的详细解析以及模拟实现strlen
目录:
strlen函数详解
原函数:
size_t strlen ( const char * str );
参数:
是一个指针类型的,就是所求字符串首字母的地址。
返回类型:
size_t类型的,也就unsigned int 类型的变量。(特别注意这一点)
注意事项:
- 字符串已经以'\0'作为结束标志,strlen函数返回的是字符串中\0前面出现的字符个数,不包含\0
- 参数指向的字符串必须以\0结束
- 注意返回值是soze_t(unsigned int)
一个常见错误案例:
#include <stdio.h>
int main()
{
const char* str1 = "abcdef";
const char* str2 = "bbb";
if (strlen(str2) - strlen(str1) > 0)
{
printf(">");
}
else
{
printf(">");
}
return 0;
}
这里的strlen(str1)=3 strlen(str2)=6。计算结果应该为-3.但是>前面是unsigned int 类型的数据,后面是int 类型的数据。在运算的时候会发生算数转换。都变成unsigned int 类型的数据。-3被看成是unsigned int类型的数据,是一个很大的数。
所以打印结果为 ">"
模拟实现1:
计数器
size_t my_strlen(const char* str)
{
unsigned int count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
模拟实现2:
递归
size_t my_strlen(const char* str)
{
if (*str == '\0')
{
return 0;
}
return 1 + my_strlen(str + 1);
}
模拟实现3:
指针-指针
size_t my_strlen(const char* str)
{
char* tmp = str;
while (*str != '\0')
{
str++;
}
return str - tmp;
}