程序开发中memcpy函数应用探讨

[复制链接]
280|8
 楼主 | 2017-11-30 18:32 | 显示全部楼层 |阅读模式
如题,,在程序开发中,这个函数恐怕是应用的比较多的了,,其主要用于内存数据的拷贝的,用度娘的,,其定义很清楚的——memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
 楼主 | 2017-11-30 18:33 | 显示全部楼层
函数原型

void *memcpy(void *dest, const void *src, size_t n);,,是不是很熟悉的?但是每次总是会吧原地址与目标地址的搞混的,,,why??
 楼主 | 2017-11-30 18:35 | 显示全部楼层
所需头文件

C语言:#include<string.h>

C++:#include<cstring>
函数返回指向dest的指针——这个需要注意的,,返回的是dest的指针,也就是第一个参数的,第二个参数是原地址的
 楼主 | 2017-11-30 18:36 | 显示全部楼层
重要说明——

1.source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针.

2.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。

注意:source和destin都不一定是数组,任意的可读写的空间均可。
 楼主 | 2017-11-30 18:38 | 显示全部楼层
我们在进行程序开发中,还会见到另一个相似的数据拷贝函数的——strcpy,,这个跟memcpy又有哪些区别的呢?
简单的查了一下的,大致意思的:strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等;
strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
 楼主 | 2017-11-30 18:39 | 显示全部楼层
大家伙在使用过程中,有更多该方面的经验请共享一下,并讨论的哈
| 2017-11-30 20:59 | 显示全部楼层
vivilzb1985 发表于 2017-11-30 18:33
函数原型

void *memcpy(void *dest, const void *src, size_t n);,,是不是很熟悉的?但是每次总是会吧原 ...

这个没啥诀窍的,,直接记住就行了啊
| 2017-12-3 22:13 | 显示全部楼层
vivilzb1985 发表于 2017-11-30 18:33
函数原型

void *memcpy(void *dest, const void *src, size_t n);,,是不是很熟悉的?但是每次总是会吧原 ...

这个一般直接使用的即可的啊
| 2017-12-17 14:07 | 显示全部楼层
vivilzb1985 发表于 2017-11-30 18:33
函数原型

void *memcpy(void *dest, const void *src, size_t n);,,是不是很熟悉的?但是每次总是会吧原 ...

这个原函数的,,在程序开发中是常用的。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表