strlen()函数的基本形式
size_t strlen (const char *char)
strlen函数以\0作为结束标志,strlen函数返回的是在字符串中“\0”,前面出现的字符个数(不包含“\0”)。
函数的返回类型是无符号整型unsigned int,在这里写作size_t,作为sizeof和strlen的专用返回类型。
strlen()的参数部分是常量字符串,用const修饰。当然也可以使用字符数组,字符数组的类型是 char* char*到const char*是权限的缩小是没问题的 但是倒过来权限的放大就不行。
三种方法模拟实现strlen()
方式1:计数器方式
int my_strlen1(const char* str)
{
int count = 0;
assert(str);//asset断言防止出现野指针
while (*str)
{
count++;
str++;
}
return count;
}
方式2:递归方式
int my_strlen2(const char* str)//递归实现
{
assert(str);
if (*str == '\0')
return 0;
else
return 1 + my_strlen2(str + 1);
}
方式3:指针—指针方式
int my_strlen3(const char* str)//指针—指针实现
{
assert(str);
char* p = str;
while (*p != '\0')
p++;
return p - str;
}
完整测试代码:
#include<stdio.h>
#include<assert.h>
int my_strlen1(const char* str)//计数器方式
{
int count = 0;
assert(str);//asset断言防止出现野指针
while (*str)
{
count++;
str++;
}
return count;
}
int my_strlen2(const char* str)//递归实现
{
assert(str);
if (*str == '\0')
return 0;
else
return 1 + my_strlen2(str + 1);
}
int my_strlen3(const char* str)//指针—指针实现
{
assert(str);
char* p = str;
while (*p != '\0')
p++;
return p - str;
}
int main()
{
const char* str = "Hello,Welcome to China";
int a = my_strlen1(str);
int b = my_strlen2(str);
int c = my_strlen3(str);
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c)
return 0;
}