strcpy函数作用是把一个地址后面的字符串拷贝到另一个地址后面,因为字符串后面要加‘\0’,所以‘\0’也要拷贝

//strcpy模拟实现①代码未优化时
#include<stdio.h>
#include<assert.h>
void my_strcpy(char* dest,const char* src)
{assert(dest && src);while(*src){*dest = *src;dest++;src++;}*dest = '\0';
}
int main()
{char arr1[] = "abcdef*";char arr2[30] = "cdef";my_strcpy(arr2,arr1);printf("%s",arr2);return 0;
}

(解释)
1.断言assert确保当传入指针是空指针是系统停止
2.当src指针指向的数据是‘\0’时停止拷贝,即while循环条件
3.先赋值后++,指针向后移动一位
4.因为先判断才赋值,所以‘\0’时循环不再进行,也就没有赋值,因而最后补上一个‘\0’

//②优化my_strcpy 因为是后置++,所以先赋值,然后地址++,最后判断
#include<stdio.h>
void my_strcpy(char* dest,char* src)
{while(*dest++ = *src++){;}
}
int main()
{char arr1[] = "abcdef*";char arr2[30] = "cdef";my_strcpy(arr2,arr1);printf("%s",arr2);return 0;
}

(解释)
1.后置++,即先使用后加一,即在while条件里是先解引用赋值以后再加一,因为++结合性更高所以是地址加一
2.逻辑顺序:先赋值后判断,最后地址加一
3.因为简单粗暴,先赋值再判断,管他是不是‘\0’,所以‘\0’也被赋值,最后不用补加‘\0’。

C语言strcpy函数模拟实现,未优化和已优化相关推荐

  1. C语言strcpy函数的使用

    点击蓝字 关注我们 strcpy简单使用:  #include <stdio.h> #include <string.h>struct Student {int sid;cha ...

  2. C语言 strcpy 函数 - C语言零基础入门教程

    目录 一.strcpy 函数简介 二.strcpy 函数实战 1.strcpy 函数简单使用 2.strcpy 函数拷贝内容以'\0'结尾 3.strcpy 函数注意崩溃问题 三.猜你喜欢 零基础 C ...

  3. C语言strcpy函数实现

    实现strcpy函数char * strcpy ( char * destination, const char * source ); destination:目的地,指向的目标数组 source: ...

  4. c语言strcpy函数的漏洞

    函数里的局部变量一般都是按序排放的,并且因为是分配在堆栈之中,它们的地址是向下"增长",即向低地址方向增长.比如下面的程序: int flag=0x12345678;printf( ...

  5. C语言strcpy()函数,字符数组复制

    需包含头文件:C 标准库 - <string.h> 文章目录 描述 声明 参数 返回值 实例 实例 1 实例 2 20220511 描述 C 库函数 char *strcpy(char * ...

  6. c语言strcpy函数的示例,c语言中的strcpy函数讨论

    strcpy函数的原型是 char *strcpy(char *strDest, const char *strScr) { char *address=strDest; assert((strDes ...

  7. C语言strcpy()函数

    前言: strcpy函数的作用是把含有转义字符\0即空字符作为结束符,然后把src该字符串复制到dest,且返回值的类型为"char*":strcpy是"string c ...

  8. C语言 strcpy函数实现

    前面写了用C语言关于字符串拷贝时可以用memcpy,其实不用memcpy也可以实现字符串的拷贝 -- strcpy专门针对字符串拷贝的函数,下面贴上linux实现方式. 函数定义如下: char *s ...

  9. c语言strcpy函数的规范写法

    #define _CRT_SECURE_NO_WARNINGS 1  #include<stdio.h> #include<assert.h> void my_strcpy1( ...

最新文章

  1. C++中的基本数据类型介绍
  2. 关于JavaScript为何要限制跨域访问
  3. 数据中心基础设施建设方案
  4. Linux DNS | resolv.conf 配置dns解析,重启network丢失
  5. 链表递增输出并释放空间
  6. html日期选择格式 now,JavaScript的Date.now()方法怎么用?
  7. 数据结构之基于Java的二叉树实现
  8. linux配置java环境变量(转)
  9. 让apache支持mysql_Apache+PHP+Mysql环境搭建之三:配置Apache支持PHP
  10. S2A哨兵数据的波段合成、镶嵌、TOA(大气表观反射率)和裁剪的操作
  11. java堆栈常用排查指令
  12. PID参数整定快速入门(调节器参数整定方法)
  13. java实现计算器功能_用java实现计算器功能
  14. 使用纯JavaScript实现全网页动态樱花飘落特效
  15. 大理旅游策划方案——定位“风花雪月”,大理游客翻倍!
  16. jvm学习路线(简洁明了)
  17. 关于酷狗直播伴侣无法识别虚拟摄像头问题----提供摄像头识别套装、支持远程技术协助(更新2020-11-23)
  18. 小程序如何推广?小程序有哪些推广方式?
  19. ROTATED REGION BASED CNN FOR SHIP DETECTION 基于旋转区域的CNN舰船检测
  20. win7安装linux子系统,linux系统装win7系统安装教程【图文教程】

热门文章

  1. 深度学习环境 Ubuntu16.04 LTS + GTX750Ti + CUDA9.0 + cudnn7.0 + python3.6.5 + tensorflow1.6搭建
  2. 试题 算法训练 黑心药商 ALGO-1002
  3. 暗黑2服务器修改,暗黑2服务器频道LOGO制作教程
  4. Python 排坑日记 --SSLContext错误
  5. python中numpy的dtype
  6. Java Map的循环遍历
  7. android 全局踢人,微信安卓系统如何在群里踢人
  8. 站在CNN肩膀上的巨大腾飞,Swin Transformer:实现对各类SOTA的降维打击
  9. QQ号交易必备常识 防止被骗
  10. java实习面试题_实习生java面试题集及详细答案