一、库函数strlen的认识
关于库函数strlen我们可以从以下链接中认识:库函数strlen是求字符串长度的函数
https://legacy.cplusplus.com/reference/cstring/strlen/?kw=strlen
size_t strlen ( const char * str )
注意
字符串以 ‘\0’ 作为结束标志,库函数strlen 返回的是在字符串中 ‘\0’ 前面出现的字符个数但是不包括’\0’,双引号(“”)末尾是隐藏着一个 '\0’的
参数指向的字符串必须要以 ‘\0’ 结束
函数的返回值是 size_t ,是无符号的
二、库函数strlen的使用
#include <stdio.h>
#include <string.h>//使用库函数strlen需要的头文件
int main()
{
char arr[] = "abcdef";
int ret = strlen(arr);
printf("%d\n", ret);
return 0;
}
运行结果:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = { 'a','b','c','d' };//没有字符'\0'
int ret = strlen(arr);
printf("%d\n", ret);
return 0;
}
因为要读到’\0’才会停下来,但是程序中没有’\0’所以得到的是随机值
int main()
{
char arr1[] = "abcd";
char arr2[] = "abcdef";
if (strlen(arr1) - strlen(arr2) > 0)
printf(">=\n");
else
printf("<\n");
return 0;
}
因为库函数strlen的返回值是suze_t(无符号整型),所以是大于0的
三、库函数strlen的三种模拟实现方式
1、用计数器的方式实现
#include <stdio.h>
int my_strlen(const char* str)
{
int count = 0;//设置计数器
while (*str!='\0')//对指针进行解引用找到那个值,若那个值不等于'\0'则向后依次找
{ //直到找到'\0',结束循环
count++;//每次找到一个值,计算器++
str++;
}
return count;//循环结束返回计数器的值
}
int main()
{
char str[] = "abcdef";
int len = my_strlen(str);
printf("%d\n", len);
return 0;
}
2、用函数递归的方式
#include <stdio.h>
int my_strlen(const char* str)//每次递归都会使指向首元素的指针加1,直到遇到'\0'递归结束
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);//递归每进行一次返回值就加1
}
int main()
{
char str[] = "abcdef";
int len = my_strlen(str);
printf("%d\n", len);
return 0;
}
3、指针-指针的方式
#include <stdio.h>
int my_strlen(char* s)
{
char* p = s;//把函数传来的值赋给指针p
while (*p != '\0')//对指针p进行解引用,如果不为'\0',则依次向后找,直到找到'\0'结束循环
{
p++;
}
return p - s;//对指针相加减计算的是中间元素的个数
}
int main()
{
char str[] = "abcdef";
int len = my_strlen(str);
printf("%d\n", len);
return 0;
}