美文网首页
memmove和memcpy

memmove和memcpy

作者: helinyu | 来源:发表于2022-02-14 14:49 被阅读0次

内存移动

void *memmove(void *str1, const void *str2, size_t n)
str1 -- 这是指针数组,其中的内容将被复制到目标,类型强制转换为void类型的指针。
str2 -- 这是要复制的数据源的指针,void
类型的指针型铸造。
n -- 这是要被复制的字节数。
这个函数返回一个指针到目的地,str1。

内存拷贝

void *memcpy(void *str1, const void *str2, size_t n)
str1 -- 这是指针数组,其中的内容将被复制到目标,类型强制转换为void类型的指针。
str2 -- 这是要复制的数据源的指针,void
类型的指针型铸造。
n -- 这是要被复制的字节数。
这个函数返回一个指针到目的地,str1。

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

参考两者的对比
为什么不用memmove替换掉memcpy
memmove 比memcpy 性能上稍微慢点

memcpy出现内存重叠

<1> memcpy一个一个拷贝, 如果将3,4拷贝到1,2位置,先讲过3拷贝到1,然后将4拷贝到2。
如果将3,4拷贝到4,1位置,那么还会将3拷贝到4,这个时候4的位置是3了,会将原来4的位置的3的值拷贝到1的位置[出现问题]
<2>memmove会先判断方向,然后再去进行拷贝,3,4拷贝到4,1的位置,会先判断方向,然后从后面开始拷贝。 【没问题】

相关文章

  • memmove 和 memcpy 的区别

    memmove和memcpy都是拷贝,区别是memmove会判断方向,如果有重叠的区域那么memcpy就会有问题 ...

  • memmove和memcpy

    内存移动void *memmove(void *str1, const void *str2, size_t n)...

  • memcpy与memmove的区别

    memcpy和memmove都是C语言的库函数,相比于strcpy和strncpy只能拷贝字符串数组,memcpy...

  • memset, memcpy and memmove

    memset 函数原型 头文件include 功能将dest所指的内存区域的前size个字节的值全部设置为ch指...

  • memcpy memmove 函数

    memcpy函数 函数原型 功能:由src指向地址为起始地址的连续 size个字节的数据复制到以dest指向地址为...

  • memmove与memcpy

    我们知道,分类的方法列表是通过memmove和memcpy加到类的方法列表的前面,而同名的分类方法根据文件的编译顺...

  • memmove 和 memcpy的区别

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

  • memmove 和 memcpy的区别

      在看Category的源码时碰见了两个C语言函数memmove和memcpy,在string.h中我们可以看见...

  • 总结:头文件cstring函数的用法(original)

    一.复制类(cpy) (1)memcpy 函数原型: 用法:可与用于转移数据 (2)memmove 函数原型: 基...

  • memset,memcpy,memmove函数

    这三个函数分别实现内存设置,内存拷贝和内存移动 需要包含头文件#include 1.memset函数:内存的值重新...

网友评论

      本文标题:memmove和memcpy

      本文链接:https://www.haomeiwen.com/subject/aqnclrtx.html