`
gqf2008
  • 浏览: 76791 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

memmove 和 memcpy的区别

阅读更多

memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:

 

void  * memcpy ( void  * dst,  const  void  * src,  size_t  count) ;


void  * memmove ( void  * dst,  const  void  * src,  size_t  count) ;   


他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。

第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。

第二种情况下,问题出现在右边的两个字节,这两个字节的原来的内容首先就被覆盖了,而且没有保存。所以接下来拷贝的时候,拷贝的是已经被覆盖的内容,显然这是有问题的。

实际上,memcpy只是memmove的一个子集。

二者的c语言实现很简单,有兴趣的朋友可以去看看。在实际情况下,这两个函数都是用汇编实现的。

分享到:
评论

相关推荐

    memmove、memcpy和memccpy简介.docx

    memmove、memcpy 和 memccpy 是三个常用的内存拷贝函数,它们都用于从一个缓冲区拷贝数据到另一个缓冲区,但它们之间有一些区别。 memmove 函数 memmove 函数的定义为:`void *memmove(void *dest, const void *...

    不调用C库函数实现memmove-memcpy函数功能

    在深入探讨如何不调用C库函数实现`memmove`和`memcpy`的功能之前,我们首先需要理解这两个函数的基本概念及其在计算机编程中的作用。`memcpy`和`memmove`都是用于内存操作的重要函数,它们负责将源内存区域的数据...

    C++中memcpy和memmove的区别总结

    那么既然memcpy和memmove二者都是内存拷贝,那二者究竟有什么区别呢? 先说memcpy 你有没有好好的参加过一场C++笔试。让你写出memcpy的实现,这是多么常见的笔试题啊。现在,拿起你的演算纸和笔;是的,是笔和纸,...

    memcpy及memmove.pdf

    在C语言中,`memcpy`和`memmove`是两个用于内存操作的重要函数,它们都属于C标准库中的`<string.h>`或`<memory.h>`头文件。这两个函数的主要功能是从源内存区域复制数据到目标内存区域,但在处理内存重叠问题时,...

    常用函数的实现strcpy,memcpy,memmove,strcat,strcmp原型

    本文将深入解析五个常用的C语言函数:`strcpy`、`memcpy`、`memmove`、`strcat`和`strcmp`的实现原理与功能特性,这些函数在处理字符串复制、连接、比较以及内存拷贝时扮演着关键角色。 ### 1. `strcpy` - 字符串...

    关于memcpy和memmove的一点重要说明

    今天看到书上降到memcpy和memmove的区别才突然发现原来两者之间有如此区别,以前只知道这两个函数是 实现同样的功能,没有接触到其不同。 memcpy和memmove在MSDN的定义如下: 从两者的声明来看的确没有区别,我们来...

    memcpy 和strcpy 的区别

    memcpy 和 strcpy 的区别 memcpy 和 strcpy 都是标准 C 库函数,都是用于从一块内存复制一段连续的数据到另一块内存,但是它们之间存在一些关键的区别。 首先,strcpy 函数用于复制字符串,它从源字符串的起始地址...

    深入理解memmove()与memcpy()的区别以及实现方法

    在C和C++编程语言中,`memmove()` 和 `memcpy()` 都是用于复制内存区域的函数,但它们在处理重叠内存区域时的行为不同。这篇文章将详细探讨这两个函数的区别以及它们的实现方法。 首先,`memcpy()` 函数位于 `...

    memmove_test.zip

    它不同于`memcpy`,`memmove`在处理重叠区域时依然能保证数据的正确性。本文将深入探讨`memmove`的原理,并通过汇编语言展示其实现细节。 首先,我们要理解`memmove`函数的基本定义。在C语言中,`memmove`函数的...

    memmove函数.docx

    与`memcpy`函数不同的是,`memmove`能够正确处理源区和目标区的重叠情况,确保数据的正确无损复制。 ### 2. 工作原理 `memmove`函数在处理内存重叠时,采用从后向前拷贝的方式,避免了在拷贝过程中源数据被提前...

    网络渗透——BSD的memcpy溢出利用技术

    防范memcpy溢出的方法包括使用安全的内存拷贝函数,如memcpy_s或memmove,它们会检查目标缓冲区的大小,防止溢出;使用栈保护机制,如Canary值,检测栈溢出;以及使用地址空间布局随机化(ASLR)等技术,增加攻击的...

    memcpy实现.pdf

    总结来说,`memcpy`的实现需要考虑地址重叠的情况,而优化的`Memcpy`函数通过判断源和目标的相对位置,选择了合适的复制方向,避免了可能的错误。虽然`memmove`提供了安全的保证,但在特定场景下,自定义的`memcpy`...

    memcpy实现 (2).pdf

    《深入理解memcpy的实现与应用》 在编程领域,内存操作是基础且至关重要的环节。`memcpy`函数作为C语言中的一个经典...在实际开发中,应根据具体需求和性能要求选择使用`memcpy`、`memmove`或自定义的内存拷贝函数。

    memcpy, memcpy()函数,字符串拷贝

    2. **与`strcpy`的区别**:`strcpy`函数仅用于字符串的复制,并且会自动复制到空字符`\0`为止,而`memcpy`则不考虑空字符,它可以用来复制任意类型的字节序列。 3. **目标内存的管理**:每次使用`memcpy`之前必须...

    memcpy函数的实现代码.docx

    `memmove`函数与`memcpy`相似,但`memmove`可以处理源和目标区域重叠的情况,而`memcpy`则假设两个区域不重叠。在`memmove`的实现中,它会先判断源和目标的相对位置,然后选择正向或反向复制以防止数据破坏。 总结...

    memcpy函数的实现代码

    - `memmove`函数是`memcpy`的一个扩展版本,它可以处理源和目标内存区域重叠的情况。 - 该实现首先检查源和目标是否重叠,如果重叠,则从后往前复制以避免覆盖未复制的数据。 #### 三、常见问题解答 1. **为何要...

    编程函数-memcpy函数

    1. **内存区域不重叠**:`memcpy`假设`source`和`destin`指向的内存区域不重叠。如果它们重叠,行为是未定义的,可能不会按预期工作,此时应该使用`memmove`函数来安全地处理重叠区域的复制。 2. **遇到终止符**:...

Global site tag (gtag.js) - Google Analytics