1.strcpy函数

最近看c++相关的内容,看到了strcpy函数相关,然后就想起来一件陈年往事。
还是很多年前,本人刚毕业校招出去面试,去了当时的某国民搜索引擎公司。负责面试的老哥上来让我手撕code,说写个字符串的实现吧。我说这不很简单?python直接一个赋值就搞定了?java不也是一个赋值搞定?然后老哥自言自语,哦你没写过c++啊,那这确实不好弄,咱们换道题把。

当时的我,确实coding比较少。最主要的是,确实基本没搞过c++,所以也没get到老哥的点。现在想想,那时候也真的是…

不过毕业以后工作好些年,基本上也没咋弄过c++。毕竟模型的技术栈,数据的技术栈,除了做后端架构对性能要求比较高的场景,确实接触c++的机会不多。不过多年以后,还是要学习一下。这也算是有生之年逃不过系列吧。

2.strcpy函数签名

我们看看strcpy在string.h中的函数签名

char *strcpy(char *__dst, const char *__src);

其中,dst是存储复制内容的目标指针,src是被复制的字符串指针,加上const修饰表示src不能被修改。

先试试strcpy库函数的效果。

void copy_library() {const char src[] = "abcdefgh";char dest[sizeof(src)];strcpy(dest, src);cout<<dest<<endl;
}

注意如果src是指针,dest指定大小的时候就不能用sizeof(src),因为sizeof(src)的大小为指针大小恒为8。

3.自己实现strcpy函数

下面我们自己来实现strcpy函数。

char* copy_string(const char* src, char dest[]) {if (src==NULL || dest==NULL) {return NULL;}int i=0;while(*src != '\0') {dest[i++] = *src++;}dest[i] = '\0';return dest;
}

首先做异常值处理,如果src或者dest任意一个指针为NULL,返回值为NULL。
然后开始进行复制操作。
while(*src != ‘\0’) 这一句,表示终止条件,因为src是以字符数组进行存储,且以’\0’结尾。所以在遇到’\0’字符前,说明字符串都要进行复制。

重点看看dest[i++] = *src++这一句。
前面我们已经分析过,*src++表示取src指针当前位置的值,然后指针位置进行自加1。所以这一句的意思是,将src当前位置取值并赋值给dest[i],并且src与dest位置都自增1。

最后,当src遇到’\0’字符,说明此时字符串结束,那么给dest也叫上’\0’字符表示字符串结束。

void copy_string_imp() {const char* src = "abcdefg";int i=0;while(src[i] != '\0') {i++;}char dest[i+1];copy_string(src, dest);cout<<dest<<endl;
}

以上是复制的实现。

输入为src字符串,用指针表示。
因为是用指针表示,所以不能直接用sizeof求大小,需要先求出字符串的长度i。
然后将dest分配大小,注意大小是i+1,因为src计算长度i时,没有将’\0’字符算进去。
最后调用我们上一个实现方法即可。

在main方法中调用

int main(int argc, char const *argv[])
{copy_string_imp();return 0;
}

输出为

abcdefg

即实现了字符串的复制。

4.p[i] 与*(p+i)

另外一个小的点值得注意一下:
p[i]与*(p+i)的意义完全一样,均表示数组第i个元素值。没有什么逻辑,取下标语法就是如此规定。

c++实现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. Java—数据库技术
  2. 二.java下使用RabbitMQ实现hello world
  3. 多目标进化优化 郑金华pdf_简化审批流程 金华首张以“告知承诺制”审批的医疗器械经营许可证发放...
  4. 苹果修复今年以来的第13个0day,影响iOS 和 macOS
  5. Unet美发实例分割,染发展示
  6. linux windows下重启oracle
  7. 图片像素、大小、分辨率的关系
  8. oracle数据库lpad,Oracle的lpad与rpad函数的应用
  9. 网站打开速度过慢时该怎么提高?
  10. 高并发系统--限流算法
  11. ACM赛后总结2018.09.23
  12. 【学习资料】VMware安装到Linux系统安装全过程2021版 【手把手教,包教包会】
  13. 用计算机打生僻字的歌,学子写抖音最火《生僻字》歌,70多个生僻字,懵了~
  14. AV1比HEVC/H.265简单对比
  15. 1404:我家的门牌号(C C++)
  16. android 4.4 锁屏密码,安卓手机忘记锁屏密码怎么办?安卓手机绕过锁屏密码的几种解决方法...
  17. Toronto Research Chemicals丨艾美捷 ACP-5197
  18. Google浏览器搜索页自定义图片
  19. 【HTML期末学生大作业】 制作一个简单HTML宠物网页(HTML+CSS)
  20. 移动互联网时代,浅谈旅行社的转型升级

热门文章

  1. AWS攻防 | 利用DNS技术突破AWS隔离网络限制进行数据渗漏
  2. 计算机应用技术python_超星尔雅大学计算机应用技术02PythonB章节答案,智慧树章节答案...
  3. Android帧动画
  4. 网站建设中提高用户体验的重要性和方法
  5. DSSM、YoutubeDNN-推荐系统小结
  6. Baumer工业相机中曝光与增益两种功能的优点和作用以及使用方法
  7. 微信小程序渲染层错误:可以在AppData中获取到值但无法渲染到页面
  8. linux分区 boot,linux的分区方法
  9. 严查非正常申请专利,何为非正常专利申请?
  10. 【微信公众号开发】八、微信JS发起支付