打印

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

[复制链接]
822|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vivilzb1985|  楼主 | 2017-11-30 18:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,,在程序开发中,这个函数恐怕是应用的比较多的了,,其主要用于内存数据的拷贝的,用度娘的,,其定义很清楚的——memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
沙发
vivilzb1985|  楼主 | 2017-11-30 18:33 | 只看该作者
函数原型

void *memcpy(void *dest, const void *src, size_t n);,,是不是很熟悉的?但是每次总是会吧原地址与目标地址的搞混的,,,why??

使用特权

评论回复
板凳
vivilzb1985|  楼主 | 2017-11-30 18:35 | 只看该作者
所需头文件

C语言:#include<string.h>

C++:#include<cstring>
函数返回指向dest的指针——这个需要注意的,,返回的是dest的指针,也就是第一个参数的,第二个参数是原地址的

使用特权

评论回复
地板
vivilzb1985|  楼主 | 2017-11-30 18:36 | 只看该作者
重要说明——

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

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

注意:source和destin都不一定是数组,任意的可读写的空间均可。

使用特权

评论回复
5
vivilzb1985|  楼主 | 2017-11-30 18:38 | 只看该作者
我们在进行程序开发中,还会见到另一个相似的数据拷贝函数的——strcpy,,这个跟memcpy又有哪些区别的呢?
简单的查了一下的,大致意思的:strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等;
strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

使用特权

评论回复
6
vivilzb1985|  楼主 | 2017-11-30 18:39 | 只看该作者
大家伙在使用过程中,有更多该方面的经验请共享一下,并讨论的哈

使用特权

评论回复
7
comeon201208| | 2017-11-30 20:59 | 只看该作者
vivilzb1985 发表于 2017-11-30 18:33
函数原型

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

这个没啥诀窍的,,直接记住就行了啊

使用特权

评论回复
8
angerbird| | 2017-12-3 22:13 | 只看该作者
vivilzb1985 发表于 2017-11-30 18:33
函数原型

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

这个一般直接使用的即可的啊

使用特权

评论回复
9
comeon201208| | 2017-12-17 14:07 | 只看该作者
vivilzb1985 发表于 2017-11-30 18:33
函数原型

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

这个原函数的,,在程序开发中是常用的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:后来乍到,前辈们多多包涵了啊。。

88

主题

4276

帖子

6

粉丝