由于可以把任何类型的指针赋给void类型的指针
这个函数主要是实现各种数据类型的拷贝。
用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。
memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。
考虑到内存可能重叠的情况,要在函数中避免有以下方式
void *memmove(void * dest, void *src, size_t n)
{
void *tmp;
int p;
if ((tmp=malloc(n))==NULL)
return NULL;
for(p=0;p<n;p++)
*((char *)tmp+p)=*((char *)src+p);
for(p=0;p<n;p++)
*((char *)dest+p)=*((char *)tmp+p);
return dest;
}
#include "stdio.h"
void* memmove(void *dest, const void* src, size_t n)
{
if(dest == NULL || src == NULL)
return NULL;
char* p =(char*) dest;
char* q =(char*) src;
while(n--)
{
*p++ = *q++;
}
return dest;
}
int main()
{
char* p = "hello,world";
char dest[6] = {0};
char *q = (char*)memmove(dest,p,5);
printf("%s\n",dest);
printf("%s\n",q);
return 0;
}