memmove函数的使用与模拟实现
目录
1.头文件
2.memmove函数讲解
3.memmove函数模拟实现
方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!
1.头文件
memcpy函数的使用需要包括头文件
#include<string.h>
2.memmove函数讲解
memmove的用法与上一节讲的memcpy函数相同
二者之间只有一点不同那就是memmove可以实现d地址重叠的复制
示例如下:
这就是地址重叠的复制,我们说过memcpy在VS2022中也可以实现这种操作,但其实memcpy用这种地址重叠的定义是不对的,应该使用memmove函数
3.memmove函数模拟实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void my_memmove(void* arr1,void* arr2,size_t num) {//1个字节1个字节的复制//后>前(指arr2>arr1)if (arr2 > arr1) {while (num--) {*(char*)arr1 = *(char*)arr2;arr1 = (char*)arr1 + 1;arr2 = (char*)arr2 + 1;}}//前>后(指arr1>arr2)while (num--) {*((char*)arr1 + num) = *((char*)arr2 + num);//从后往前复制,避免数组内容改变,复制内容不对}}
int main()
{ char arr2[] = { "12345"};char arr1[] = { "abcxxxdefg" };int sz = strlen(arr1);my_memmove(arr1+3 , arr1, 5);for (int i = 0; i < sz; i++) {printf("%c ", arr1[i]);}
}
使用了从后往前复制的思路,避免地址重叠因变量的改变而导致复制内容不对