如何正确实现c语言strcpy函数
1、c语言提供的字符串复制函数strcpy,将原字符串中每个字符复制到目标字符数组中,直到遇到原字符串的结束符。
因为只判断结束条件,即原字符串结束符。那么写入到目标字符串时就会有越界风险,所以,strcpy函数不建议使用。
如下错误示例:

2、为了解决越界风险,c语言继续提供了strncpy函数。strncpy函数添加了一个参数,即复制字符串大小。
这样复制字符串时,判断原始字符串结束符,同时判断复制字符串个数不超过参数大小。

3、虽然strncpy函数控制了复制字符串个数,但在日常项目中还是发现该函数的使用有两个问题:
1. strncpy复制了参数n个字符串,但并不会在目标字符串中添加结束字符。
2. 因为不添加结束字符的原因,笔者发现传递参数n经常会使用错误,大部分人都直接传递目标字符数组大小,实际应该为该大小减1的值。


4、我们参考strncpy函数定义我们自己的字符串复制函数,我们定义三个参数:目标字符数组、目标字符数组大小以及原始字符串。
在复制时结束条件为:原始字符串结束符与目标字符数组大小的组合。

5、在自定义复制函数中,我们首先进行入参判断,对于一些特殊的输入如空字符串,要能正确处理。
在复制时,如果原始字符串超过目标字符数组大小时,我们尽可能多复制字符串。
最后,我们需要给目标字符数组添加字符结束符,这就是我们比strncpy优化最重要的地方。

6、最后,我们编写测试程序。使用自定义复制函数时,我们明确传入目标字符数组大小即可,不用担心越界问题等。
验证程序以及最后输出如下:


声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:118
阅读量:67
阅读量:134
阅读量:122
阅读量:168