头文件:
string.h
函数声明:
void* my_memmove(void* dest, const void* src, size_t count)
返回值:
目标指针dest
用法:
从src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
对于int形数据每个有4字节,所以如果要将5个元素复制应要输入20.
对比memcpy , memmove函数可以实现内存重叠拷贝
例子:
#include<stdio.h>
#include<string.h>
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr+3 , arr , 20);
int i = 0;
for (i = 0;i < 10;i++) {
printf("%d ", arr[i]);
}
return 0;
}
函数的实现:
对于src<dest时:
对于src>dest:
#include<assert.h>
void* my_memmove(void* dest, const void* src, size_t count) {
assert(dest && src);
void* ret = dest;
if (src < dest) {
while (count--) {
*((char*)dest + count) = *((char*)src + count);
}
}
else {
while (count--) {
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
return ret;
}