关于str和mem系列的部分讲解

str

strstr

strstr的意思就是查找,在一段内容中查找是否有我们需要的目标,所以我们首先要记录好两个参数的起止位置,因为之后查找将会改变他们的指向,而当两个参数都指向'\0'时就代表查找完了,而如果两个参数相等,则代表我们可以继续往后查找,如果不相等则只有第一个参数往后走一步,当第二个参数等于‘\0’时那就代表我们可以在第一个参数中找到他,那么我们就返回我们找到他的地址star。

strcpy

strcpy则代表的是拷贝,但是这很有可能会产生越界,所以我们加上一个参数num,让我们在使用它之前先搞清楚我们到底要拷贝多少目标,而由于之后的拷贝会改变他的指向,所以我们先在外面记录一下他的最初指向,然后将目标的内容拷贝到目的地中,直到拷贝完成目标的地址指向‘\0’,判断为假循环结束,此时我们返回最初指向的地址就好了。

strcmp

strcmp是判断两个字符串的大小,首先我们就需要判断他们两个是否相等,如果第一个就不相等,那我们直接return他们相减的结果就好,负数代表小于,等于代表相等,正数则代表大于,而如果他们相等,还需要判断一下是否为空,以防产生越界,如果不为空那么他们则往后走一步然后继续比较,直到比出结果。

mem

memcpy

首先我们发现这个cpy好像和上面的cpy不太一样,参数这么会是void*类型呢,因为这样可以传入任何类型的参数,只需要告诉我他多大就好,进来后自动将他强制类型转换成char*然后往后走你传进来的大小个字节就可以达成目标,当然我们也必须和上面一样记录好他的初始指向,然后用循环慢慢把他的值遍历即可。

memmove

上面的cpy在某些平台可能不能自己cpy自己,如果我们需要这样做,我们可以使用move函数,他的参数部分和cpy一模一样,只是内部有少许不同,首先我们需要明白他们的内存部分有没有重叠,如果有,那代表我们不能直接覆盖,因为覆盖到后面可能会把我们原本需要移动的值给覆盖掉,并且如果他们的内容重叠我们需要从后往前移动,首先强转成char*不必多说,但由于强转是临时的,所以我们需要再来个括号加上sum,也就是我们的步长,使我们从后往前覆盖。那不重叠的部分就简单了,因为内容不冲突所以直接和cpy一样即可。

这次先简单来五个,其他的等我之后写完再来和大伙分享。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值