strcpy函数实现

strcpy函数的原型为:char* strcpy(char* _Dest, const char* _Source);

//实现1
char * strcpy(char* _Dest, const char* _Source)
{//检查传入参数的有效性assert(NULL != _Dest);assert(NULL != _Source);if (NULL ==_Dest || NULL == _Source)return NULL;char* ret = _Dest;while((*_Dest++ = *_Source++) != '\0') ;return ret;
}//实现2
char * strcpy(char* _Dest, const char* _Source)
{//检查传入参数的有效性assert(NULL != _Dest);assert(NULL != _Source);if (NULL ==_Dest || NULL == _Source)return NULL;char* ret = _Dest;int i = 0;for (i = 0; _Source[i] != '\0'; i++){_Dest[i] = _Source[i];}_Dest[i] = '\0';return ret;
}

解析:

  1. 为什么要返回char*类型;
    为了实现链式连接。返回内容为指向目标内存的地址指针,这样可以在需要字符指针的函数中使用strcpy,例如strlen(strcpy(str1, str2))。
  2. 源地址和目标地址出现内存重叠时,如何保证复制的正确性;
    调用c运行库strcpy函数,发现即使是内存重叠,也能正常复制,但是上面的实现就不行。说明,c运行库中strcpy函数实现,还加入了检查内存重叠的机制,下面是参考代码:
//my_memcpy实现重叠内存转移
char* my_memcpy(char* _Dest, const char* _Source, int count)
{//检查传入参数的有效性assert(NULL != _Dest);assert(NULL != _Source);if (NULL ==_Dest || NULL == _Source)return NULL;char* ret = _Dest;/**_Dest和_Source的内存地址有三种排列组合:1. _Dest和_Source没有发生重叠;2. _Dest和_Source地址重叠,且_Dest的地址大于_Source的地址;3. _Dest和_Source地址重叠,_Dest的地址小于_Source的地址;第一种情况和第三种情况,直接从低位字节开始复制,即可;第二种情况,必须从高位字节开始复制,才能保证复制正确。*/if (_Dest > _Source && _Dest < _Source + count ){_Dest = _Dest + count - 1;_Source = _Source + count - 1;while(count--){*_Dest-- = *_Source--;}}else{while(count--){*_Dest++ = *_Source++;}}return ret;
}

##strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数。

  1. strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广;
  2. strcpy只有两个参数,即遇到‘\0’结束复制,而memcpy是根据第三个参数来决定复制的长度。

strcpy函数实现相关推荐

  1. 常见面试题:重写strcpy() 函数原型

    已知strcpy函数的原型是 char* strcpy(char* strDest,const char* strSrc); 1.不调用库函数,实现strcpy函数 2.解释为什么要返回char*; ...

  2. strcmp函数和strcpy函数

    (一)strcmp函数 strcmp函数是比較两个字符串的大小,返回比較的结果.一般形式是: i=strcmp(字符串,字符串); 当中,字符串1.字符串2均可为字符串常量或变量:i   是用于存放比 ...

  3. 第九十六题(编写strcpy 函数)

    96.08 年中兴校园招聘笔试题 1.编写strcpy 函数 已知strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc); 当中st ...

  4. 指针的运用与strcpy函数的优化

    /*strcpy函数:将指针t指向的字符串复制到指针s指向的位置*/ 版本1: void strcpy(char *s,char *t) {     int i;         i = 0;     ...

  5. C中strcpy函数实现

    strcpy函数实现 strcpy函数的原型为:char* strcpy(char* _Dest, const char* _Source); //实现1 char * strcpy(char* _D ...

  6. strcpy函数实现的几种方式

    C/C++--strcpy函数的实现 和解析 题目:      已知strcpy函数的原型是:          char * strcpy(char * strDest,const char * s ...

  7. strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数

    strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...

  8. 【C/C++ string】之strcpy函数

    题目:     已知strcpy函数的原型是:         char * strcpy(char * strDest,const char * strSrc);     1.不调用库函数,实现st ...

  9. c++语言函数strcpy,C++中函数的安全版本的意义及strcpy函数的功能和差别(图)

    C++中函数的安全版本的意义及strcpy函数的功能和差别(图) 我们在进行C/C++编程时,会发现中有些函数在VS中使用时,提示使用_s的函数版本,其实这种_s的函数版本是安全版本,它们完成的任务与 ...

  10. strcpy函数的实现

    大家一般觉得名不见经传strcpy函数实现不是非常难,流行的strcpy函数写法是: char *my_strcpy(char *dst,const char *src) {assert(dst != ...

最新文章

  1. Python求100以内的素数和并输出
  2. 去掉Word2007中的软回车(从网页粘贴文字的一些编辑)
  3. java8中方法区的内存大小如何设置_从Java8升级到Java11
  4. springboot 技术图谱_java后台(Springboot)开发知识图谱高频技术汇总-学习路线...
  5. python带cookie发包demo
  6. python 人脸检测_借助摄像头在Python中实现人脸检测
  7. 【设计模式】—— 解释器模式Interpret
  8. 给自己一个没有退路的悬崖
  9. 邮件营销:邮件标题如何变得更有吸引力
  10. ps把一张图里面的文字去掉而不改变字后面的背景;把同一个颜色的改为别的颜色
  11. Vue动态加载本地磁盘图片
  12. matlab multiply,MATLAB Matrix Multiply Code效率
  13. Android App性能优化之内存优化
  14. JS实现多线程--Concurrent.Thread.js
  15. python制作购物网站_django搭建简单购物网站(功能不完整)
  16. 使用flex时的自动换行
  17. 基于matlab的立体图像编码解码算法仿真与分析
  18. MPC车辆轨迹跟踪----理论推导
  19. 【提高组NOIP2017】小凯的疑惑(附证明)
  20. 点亮长沙夜间经济,颐而康如何成为新晋“网红打卡点”?

热门文章

  1. 手把手教你实现在Monaco Editor中使用VSCode主题
  2. 主流语言在OD下OEP特征
  3. 【高级数据库】第二章 第04讲 多维索引
  4. 【推荐谷歌地球替代软件——图新地球简介(LocaSpace Viewer)】
  5. 用html 做一个低调的邮箱名片
  6. springboot毕设项目公积金数据管理系统2p6av(java+VUE+Mybatis+Maven+Mysql)
  7. Couldn’t write pidfile at /run/prosody/prosody.pid; /run/prosody/prosody.pid: No such file or direct
  8. (阅读笔记)PARE:A Simple and Strong Baseline for Monolingual and MultilingualDistantly Supervis
  9. 检查文档或驱动器的访问权限
  10. MyCat踩坑记(Mycat搭建,使用及配置)