提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
【萌新学习C语言】三种方法模仿strlen函数
1.计数器
2.指针-指针
3.递归方法
本次代码使用的库函数:
include <stdio.h>
include <string.h>
include <assert.h>
提示:以下是本篇文章正文内容,下面案例可供参考
一、了解strlen函数
1.1 strlen函数的参数及返回值
由此函数可以看出,strlen参数为consr char*类型,返回值时size_t,这里的size_t的类型也就是unsigned int类型(无符号整型)
1.2 strlen函数如何使用以及工作原理
1.2.1 strlen如何使用
strlen函数只针对字符串的计数。如要使用,则需向strlen函数传入字符串的地址。
#include <string.h>
int main()
{
char arr[] = "abcdef";
int n = strlen(arr);
printf("%d\n", n);
return 0;
}
1.2.2 strlen函数工作原理
由上图可知,strlen将返回字符串的个数不包括最终的NULL(也就是’\0’)。
所以说明,strlen函数将从传入的地址开始直到遇到’\0’就停止返回。
二、模拟实现strlen函数
2.1模拟实现strlen - 计数器
代码如下:
size_t my_strlen(const char* p)
{
assert(p);
int count = 0;
while (*p != '\0')
{
count++;
p++;
}
return count;
}
void test2()
{
char arr[] = "abcdef";
int n = my_strlen(arr);
printf("%d\n", n);
}
int main()
{
//test1();
test2();
return 0;
}
运行结果:
2.2模拟实现strlen - 指针-指针
size_t my_strlen(const char* p)
{
assert(p);
char* start = p;
while (*p != '\0')
{
p++;
}
return (p - start);
}
void test3()
{
char arr[] = "abcdef";
int n = my_strlen(arr);
printf("%d\n", n);
}
int main()
{
//test1();
//test2();
test3();
return 0;
}
运行结果:
2.3模拟实现strlen - 递归函数
size_t my_strlen(const char* p)
{
assert(p);
if (*p != '\0')
{
return 1 + my_strlen(p + 1);
}
else
{
return 0;
}
}
void test4()
{
char arr[] = "abcdef";
int n = my_strlen(arr);
printf("%d\n", n);
}
int main()
{
//test1();
//test2();
//test3();
test4();
return 0;
}
运行结果:
总结
了解strlen函数,知道strlen如何使用以及工作原理。