当前位置:   article > 正文

strcpy函数的模拟实现_strcpy模拟实现

strcpy模拟实现

     在本篇博客中,我们是通过对模拟实现strcpy函数my_strcpy的不断优化进行的,最终优化代码为最后一次代码。

目录

一、strcpy函数的介绍

二、strcpy函数实现字符串拷贝的示例

2.1 代码

2.2 运行结果

2.3 测试是否拷贝'\0'

​编辑

三、模拟实现strcpy

3.1 初步模拟(粗糙版)

3.1.1 问题分析

3.2 完善版

3.2.1 代码实现 

3.2.2 运行结果

  


一、strcpy函数的介绍

     strcpy,即string copy(字符串复制)的缩写。

     strcpy函数是C/C++语言的一个标准函数 [1]  ,strcpy把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*,例如strcpy(arr1,arr2);即为把数组arr2的内的字符串,复制到arr1中,注意:在字符串拷贝的过程中,'\0'也会被拷贝。

二、strcpy函数实现字符串拷贝的示例

2.1 代码

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char arr1[20] = "xxxxxxxxxxx";
  5. char arr2[] = "hello";
  6. strcpy(arr1, arr2);
  7. printf("%s\n", arr1);
  8. return 0;
  9. }

2.2 运行结果

2.3 测试是否拷贝'\0'

     打开调试,在监视窗口,我们会发现strcpy在字符串拷贝时,会把'\0'拷贝过去。

三、模拟实现strcpy

3.1 初步模拟(粗糙版)

3.1.1 问题分析

      我们要模拟实现strcpy函数,strcpy函数的基本原理如下图:

接下来我们就可以看图写代码了。

  1. #include<stdio.h>
  2. void my_strcpy(char* dest, char* src)
  3. {
  4. while (*src != '\0')
  5. {
  6. *dest = *src;
  7. dest++;
  8. src++;
  9. }
  10. *dest = *src;
  11. }
  12. int main()
  13. {
  14. char arr1[20] = "xxxxxxxxxxx";
  15. char arr2[] = "hello";
  16. /*strcpy(arr1, arr2);*/
  17. my_strcpy(arr1, arr2);
  18. printf("%s\n", arr1);
  19. return 0;
  20. }

     在某些时候,我们可能将my_strcpy处的指针传错,传成空指针,这种情况如何避免呢?我们可以使用一个库函数assert,当assert(),括号中可以放一个表达式,当表达式为假时就会报错。在上面的代码我们可以对一些部分进行完善,完善后的结果是:

  1. #include<stdio.h>
  2. #include<assert.h>
  3. void my_strcpy(char* dest, char* src)
  4. {
  5. assert(dest && src);
  6. while (*dest++ = *src++)
  7. {
  8. ;
  9. }
  10. }
  11. int main()
  12. {
  13. char arr1[20] = "xxxxxxxxxxx";
  14. char arr2[] = "hello";
  15. /*strcpy(arr1, arr2);*/
  16. my_strcpy(arr1, arr2);
  17. printf("%s\n", arr1);
  18. return 0;
  19. }

3.2 完善版

     我们发现在strcpy的官方解释中:

     我们发现strcpy函数的参数类型和返回类型与我们设计的my_strcpy都不相同,那么为什么在strcpy函数设计初始会这样设计呢?

     如果在上述代码*dest++ = *src++中,如果我们把dest和src写反了,程序会报错,那么如何避免这种问题,我们可以在*src前面加上const,这样就增加了代码的健壮性,其次在strcpy函数中返回的类型是char*类型,即函数返回的是目标空间的起始地址。下面我们按照strcpy函数尝试设计my_strcpy函数:


3.2.1 代码实现 

  1. #include<stdio.h>
  2. #include<assert.h>
  3. char* my_strcpy(char* dest, const char* src)
  4. {
  5. char* ret = dest;
  6. assert(dest && src);
  7. while (*dest++ = *src++)
  8. {
  9. ;
  10. }
  11. return ret;
  12. }
  13. int main()
  14. {
  15. char arr1[20] = "xxxxxxxxxxx";
  16. char arr2[] = "hello";
  17. printf("%s\n", my_strcpy(arr1, arr2));
  18. return 0;
  19. }

3.2.2 运行结果

 

  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/388328
推荐阅读
相关标签
  

闽ICP备14008679号