strcpy是c语言函数库的的常见字符串函数,是用于将源指针指向的C字符串复制到目标指针指向的数组中,包括终止的空字符(并在该点停止)。
我们可以用指针来对其进行模拟实现,本文将介绍strcpy的模拟实现,并了解在模拟实现过程中要用到的const和assert断言的用法
简单框架
简单的框架为,将源头字符串的地址的值传给目标字符串,知道源头字符串指像向`\0´,意味着要拷贝的字符全部拷贝完最后拷贝\0到,给字符串加上结束标志
改进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本身不可以改变