strcpy的模拟实现中关于const和assert的使用知识点

80795bfd628549f38d6c350746b81107.png

   strcpy是c语言函数库的的常见字符串函数,是用于将源指针指向的C字符串复制到目标指针指向的数组中,包括终止的空字符(并在该点停止)。

我们可以用指针来对其进行模拟实现,本文将介绍strcpy的模拟实现,并了解在模拟实现过程中要用到的const和assert断言的用法

简单框架

602b7dd386924761979c1e9081b87512.png

简单的框架为,将源头字符串的地址的值传给目标字符串,知道源头字符串指像向`\0´,意味着要拷贝的字符全部拷贝完最后拷贝\0到,给字符串加上结束标志

 

ded66b1e0d464bcb92581944825df8c6.png

 改进1 代码的简化和返回值

在c++官网中,strcpy函数返回的是目标空间的地址,在*dest++时,目标空间的地址已经发生改变,所以我们需要在循环前,保留目标空间的地址——char* ret = dest,最后再返回ret即可

在while循环中(*dest++=*src++),已经完成了对源头的拷贝,并且当拷贝到尽头时,*src指向'\0',其ASCII码值正好为0,循环结束,所以会跳出while循环,简化了代码

改进2 const的使用

在拷贝过程中,若源头的值出现改变,就会使目标函数发生改变,影响了strcpy的稳健性,这是我们不愿意看到的,所以我们可以在*src的前面加上const,来限制源头的值不可改变

改进3 assert断言的使用

我们并不能确保传过来的源头和目标空间是不是为野指针NULL,所以我们需要在传过野指针时报错,这就需要用到assert断言dest和src

最后我们完成了对strcpy的模拟实现

知识点1 

'\0'的ASCII码值是0

知识点2 assert的用法

断言assert中可以放一个表达式,如果表达式结果为假,则会报错,如果为真,则无事发生,可用于像避免出现野指针等情况

知识点3 const的用法

当const在*p之前,其限制的是指针变量指向的值不可以改变

当const修饰p,即const p,其限制的是指针变量p本身不可以改变

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值