本文主要是介绍memmove函数和memcpy函数的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C语言标准规定,memcpy用于拷贝不重叠空间。memmove用于拷贝重叠空间。重叠空间指的是拷贝内存空间和被拷贝内存空间重叠。举个例子,int arr[10] = {1,2,3,4,5,6,7,8,9,10};
把arr[4]后10个字节从arr[5]开始拷贝。这种情况我们应该使用memmove()函数来进行拷贝。
再讲一下memmove()函数的模拟实现。
空间重叠一共存在三种情况
dest在src之前
我想将678910放进34567的地址里。这里我们只需要从前往后放就行。6->3,7->4,8->5,9->6,10->7.
dest在src之后
我想把34567放进678910的地址里,这里假如我继续从前往后放,3->6,4->7.5->8,这时候,之前的6已经变成3了,假如我继续放,取代9的数据是3而不是6,因此并不能达到我想要的效果。这里,只需要从后往前放就能解决。可能我讲的不好理解,大家在纸上写一下就能看懂。
dest与src相同
这种情况就不需要考虑从前往后放还是从后往前放。
模拟实现
这篇关于memmove函数和memcpy函数的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!