我在后面附上了所有的源码
模拟实现函数的总结:
1.模拟实现的首先我们要了解函数的功能
2.实现函数需要的参数以及返回类型
3.尽量不要使用局部变量的地址作为函数的返回类型
4.对任意类型的数据进行操作可以转化为void*后在强制转化为char*
1.求字符串长度
strlen
实现strlen函数相对简单
法一:是利用count计数循环,找到’\0‘,来确定字符串的长度
法二:利用递归的思想,每次分解问题都+1,找到最后一位为’\0‘
法三:利用char*指针不断循环找到'\0',然后指针与指针相减的结果就是元素个数
2.长度不受限制的字符串函数
strcpy
1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改
2.我们创建一个指针来记录目标地址的首地址
3.通过循环不断将源字符串的数据赋值给目的字符串
4.可以将*Sur != '\0'作为循环条件,当不满足条件时,说明元字符串已经完全赋值个目的字符串
strcat
1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改
2..创建一个指针来记录目标地址的首地址,防止最后指向目的字符串的指针丢失
3将源字符串添加到目的字符串的末尾,我们要先找到目的字符串的末尾,
4.当我们找到的字符串的末尾后直接将源字符串的元素赋值
5.赋值后返回我们记录目的字符串的原地址。
strcmp
1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改
2.对比字符串,我们是对单个字符的比较,来决定大小。
3.首先我们先判断俩个字符是否相等,不相等然后比较大小,若是相等则直接+1,跳向下一个字符
3.字符串查找
strstr
1.先判断str2是否为空字符串,空字符串是任何源字符串的字串
2.一共有三个指针,俩个个指向主字符串,一个指向次字符串,
我们先思考一下,我们在判断次字符串是否为主字符串的字串时可能遇到的情况
1.直接一一对应,那么返回直接返回主字符串
2.开始没有找到,在中间,或其他位置,找到并且一一对应
3.找到之后,对应上一个或俩个又发现并不完全对应
3.1、2俩种情况相对处理任意,第三中情况,就需要我们的三指针了,当对应上以后一个指针记录上当前的位置,如果再次对应,则++,并且查看是否次字符串是否结束,否则重新回到记录的上次对应位置开始++后再次判断是否对应。
4.内存操作函数
memcpy
1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改.
2.与strcpy相似,我们先记录目的字符串的地址,然后以需要改变的字节数为控制循环的条件,因为我们使用void*接受的指针,在赋值的时候我们需要将其强制转化为char*指针,
memmove
1.相比memcpy,memmove更加强大,安全,它可以说是memcpy的升级
2.他的作用是可以将数组元素复制重负的地方也可以复制到目的
3.下面这种情况使用memcpy将蓝色的复制到红色地址的结果就不会是123,而是121
我们为了解决这种问题,可以从3复制到1,然后就不会覆盖到未复制额数据
这种情况应该直接正数着赋值
memcmp
1.我们先分析循环的条件,首先需要对比的字节数,然后如果俩个字节相等则下一个,否则对比出结果