memmove拷贝src所指的内存内容前n个字节到dest所指的地址上

用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;  
}  


你可能感兴趣的:(c,null,语言)