总体思路就是先用void* 接收数据,然后将其强转为char* 然后根据要复制的数据的大小(字节)一一进行赋值
#include <stdio.h>
#include <assert.h>
void* my_memcpy(void* dest,void* src,size_t num)
{
char* ret=(char*)dest;
assert(dest != NULL);
assert(src != NULL);
while(num--)
{
*(char*)dest=*(char*)src;
++((char*)dest);
++((char*)src);
}
return ret;
}
int main()
{
//模拟实现memcpy
int i=0;
int arr1[]={1,2,3,4,5,6,7};
int arr2[10]={0};
char a[]="abcdefg";
char b[100]={0};
int num=sizeof(a);
int num1=sizeof(arr1);
my_memcpy(arr2,arr1,num1);
for(i=0;i<10;i++)
{
printf("%d ",arr2[i]);
}
printf("\n");
my_memcpy(b,a,num);
printf("%s",b);
return 0;
}
``
也可以用c语言来实现memmove
可以实现将自己的一段有重合的内容复制给自己
```c
#include <stdio.h>
#include <assert.h>
void* my_memmove(void* dest,void* src,size_t num)
{
void* ret=dest;
assert(dest !=NULL);
assert(src !=NULL);
while(num--)
{
if(dest<src)
{
*(char*)dest=*(char*)src;
++(char*)dest;
++(char*)src;
}
else
{
*((char*)dest+num)=*((char*)src+num);
}
}
return ret;
}
int main()
{
int i=0;
int arr1[]={1,2,3,4,5,6,7,8,9,10};
my_memmove(arr1+2,arr1,16);
for(i=0;i<10;i++)
{
printf("%d ",arr1[i]);
}
return 0;
}