【题目12】用C语言实现memmove函数

题目:用C 语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove
函数的功能是拷贝src 所指的内存内容前n 个字节到dest 所指的地址上。

 

解题思路:又是百度的一道笔试题,貌似也没什么难度,只是要注按字节拷贝时指针类型的转换。这些

基本的函数,在Linux源代码中都可以找到,可以对照一下那里的实现,看我们的实现哪些地方考虑不

全面。

 

2009年9月24日:今天发现自己真的考虑问题非常非常不周全,memmove要靠虑内存区域重叠的情况

代码实现如下

void memmove(void* pDest, void* pSrc, unsigned int count)
{
     char* dest , *src;
     int i;
     dest = pDest;
     src = pSrc;
     if((pDest < pSrc)|| (pSrc + count > pDest))
     {
 for(i = 0; i < count; i++)
      *dest++ = *src++;
     }
     else
     {  //有重叠的情形
        dest += count - 1;
        src  += count - 1;
        for(i = 0; i < count; i++)
             *dest-- = *src--;
     }
}

}

#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,linux,百度,null,语言)