C语言中的复制函数(strcpy和memcpy)第三章

3、strcpy和memcpy的区别。

1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

2017/3/19更新

memcpy的实现

要注意,内存重叠的情况,比如

char test[]=“abcdefghi”;

memcpy(test+3,test,6);

如果从头向尾复制,结果就是abcabcabc,正确结果应该是abcabcdef。所以像这种情况应该从尾向头复制

void memcpydiy(char *dest,const char *scr,int len)

{

if (dest == NULL || scr == NULL)

return;

char *pdest = dest;

char *pscr = (char *)scr;

if ((scr < dest) && (dest < scr + len)) //重叠,从尾部开始复制

{

pdest = pdest + len - 1;

pscr = pscr + len - 1;

while (len–)

{

*pdest-- = *pscr–;

}

}

else

{

while (len–)

{

*pdest++ = *pscr++;

}

}

}

---------------------

完结 欢迎大家发表各自的观点 谢谢

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术换美食换不换

lua

数学库由算术函数的标准集合组成,比如三角函数库(sin, cos, tan, asin, acos, etc.), 幂指函数(exp, log, log10),...

15120
来自专栏逍遥剑客的游戏开发

PL/0语言编译程序分析

33950
来自专栏北京马哥教育

Linux Awk用法总结

? 目录 Awk是什么 命令行语法 脚本(Script)组成 模式(Pattern) 正则表达式(Regular Expression) 表达式(Exp...

41140
来自专栏编程心路

想学习php的,不如来这里看看

win+R打开命令行,cmd进DOS窗口 DOS命令开启关闭Apache和Mysql Apache启动关闭命令

13630
来自专栏linux系统运维

sed工具

17740
来自专栏刘望舒

Java虚拟机(二)对象的创建与OOP-Klass模型

前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇...

268100
来自专栏我的博客

TP入门第十二天

1、模板技术 为何使用模板这里就不罗嗦了,直接介绍模板技术 变量传递和显示: 例如在action里面可以这样写 $title=”变量”; $arr=array(...

34760
来自专栏编程

linux基础(三)

一、文本处理工具 1、文本查看工具less和cat cat -E filename 能看到行的结束符 -A filename 能看到tab键 回车 (hexdu...

30870
来自专栏小樱的经验随笔

Javascript中的url编码与解码(详解)

摘要 本文主要针对URI编解码的相关问题做了介绍,对url编码中哪些字符需要编码、为什么需要编码做了详细的说明,并对比分析了Javascript中和编解码相关的...

45090
来自专栏xiaoxi666的专栏

c++ 继承类强制转换时的虚函数表工作原理

本文通过简单例子说明子类之间发生强制转换时虚函数如何调用,旨在对c++继承中的虚函数表的作用机制有更深入的理解。

22530

扫码关注云+社区

领取腾讯云代金券