今天给大家来带三个常用库函数的模拟实现!
1.strlen
众所周知使用strlen是需要包含头文件<string.h>,所以我们库里面strlen是如何实现的呢?
这里我们需要了解到strlen是计算字符串的个数的,遇到’\0’停止,计算’\0’之前字符串个数。
所以我们知道要想实现这个函数我们就需要先了解这个函数的使用规则,所谓了解敌人,才能更快的击倒他。
在这里我们先插入一个字符串,再将字符串首元素传入我们的自己的函数“My_strlen”.
int main()
{
char* arr[]="I love chen";
My_strlen(arr);
}
ok,没问题接下来我们进入正题开始写strlen的函数实现过程:
int My_strlen(char* p);//因为我们需要计算字符串个数,所以返回类型给到int
{
assert(p);//首先我们需要确保指针传来不为空,不要忘记包含头文件<assert.h>
int count = 0;//这里设置一个count作为计数器
while(*p!='\0')//遇到'\0'不进入循环
{
*p++;//每进来一次指针向后走一位
count++;//随后计数器+1
}
//最后遇到'\0'跳出while循环
return count;
}
成品展示:
这样我们strlen的模拟实现就结束啦!
2.strcpy
同样我们要先了解strcpy的作用,strcpy是用来将一个字符串复制到另一个字符串,这里有四点我们需要清楚:
• 源字符串必须以 ‘\0’ 结束。
• 会将源字符串中的 ‘\0’ 拷⻉到⽬标空间。
• ⽬标空间必须⾜够⼤,以确保能存放源字符串。
• ⽬标空间必须可修改。
同样这里我们需要给到两个字符串
int main()
{
char* arr="I love chen";
char arr1[50]="hello chen";//这里我们一定要使用字符数组,因为目标空间必须要可以修改
My_strcpy(arr1,arr)
}
下面我们来完成strcpy完整的函数实现:
char* My_strcpy(char* p,char* p1);
{
char* ret = p//我们后面p指针会++,导致找不到原来的地址,所以我们先把p的指针存起来
//同样这里我们需要保证两个指针传来不能为空
assert(p && p1);
while(*p++ == *p1++)
{
;//这里while循环里面不需要做人事情,所以这里我们给到一个空语句
}
return ret;
}
成品展示:
3.strcat
strcat主要是用来字符串追加,可以将两个字符串连接起来,当然这个也是有条件限制滴!
• 源字符串必须以 ‘\0’ 结束。
• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
• ⽬标空间必须可修改。
同样这里我们需要创建两个字符串
int main()
{
char arr[50]="I love chen";
char* arr1="But this is a regret"💕
My_strcat(arr,arr1);
}
strcat的具体实现
char* My_strcat(char* p,char* p1)
{
char* ret = p;//使用ret存储p指针原始地址
assert(p && p1);//确保p和p1传来不为空指针
while(*p!='\0')
{
//找到目标空间的尾部
p++;
}
while(*p++=*p1++)//将源字符串拷贝到目标空间
{
;
}
return ret;
成品展示:
欧克,以上实现方法不唯一,希望各位小伙伴评论区讨论!!