memcpy()和memmove()都是C語言中的庫函數,在頭文件string.h中
void *memmove(void *dst, const void *src, size_t count);
void * memcpy ( void * dst,const void * src,size_t count)
{
void * ret = dst;
while (count--)
{ // 注意, memcpy函數沒有處理dst和src區域是否重疊的問題
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
//也可以用 *dst++ = *src++;語句替換上面三條語句
}
return(ret);
}
void *memmove(void*dst, const void*src, size_t count)
{
void *ret = dst;
if(dst < = src || dst >= src + count)
{
// 若dst和src區域沒有重疊,則從起始處開始逐一拷貝
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
else
{ // 若dst和src 區域交叉,則從尾部開始向起始位置拷貝,這樣可以避免數據衝突
dst = (char *)dst + count - 1;
src = (char *)src + count - 1;
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst - 1;
src = (char *)src - 1;
//或者用 *dst-- = *src--;替換上面三條語句
}
}
return(ret);
}
}