linux系统库函数之memmove

573 #ifndef __HAVE_ARCH_MEMMOVE
574 /**
575  * memmove - Copy one area of memory to another
576  * @dest: Where to copy to
577  * @src: Where to copy from
578  * @count: The size of the area.
579  *
580  * Unlike memcpy(), memmove() copes with overlapping areas.
581  */
582 void *memmove(void *dest, const void *src, size_t count)
583 {
584         char *tmp;
585         const char *s;
586 
587         if (dest <= src) {
588                 tmp = dest;
589                 s = src;
590                 while (count--)
591                         *tmp++ = *s++;
592         } else {
593                 tmp = dest;
594                 tmp += count;
595                 s = src;
596                 s += count;
597                 while (count--)
598                         *--tmp = *--s;
599         }
600         return dest;
601 }
602 EXPORT_SYMBOL(memmove);

603 #endif

前面看memcpy函数就说过,memcpy函数在拷贝之前你还要做一个判断,如果dest < src你才能使用memcpy函数,我说了,完全没有必要,有函数帮我们做这个事情。

memmove在拷贝之前就做了一个判断,如果dest <= src,就按照memcpy的思路拷贝,如果dest > src怎么办呢,看函数,它是从后面往前拷贝,这样就能正确拷贝数据了。

posted @ 2012-03-20 13:46  移动应用开发  阅读(326)  评论(0编辑  收藏  举报