众所周知,对于字符串来说,将一个字符串复制到另一个字符串中去的时候我们是用的是strcpy函数,那么大家有没有想过那对于不是字符串的内容我们该如何进行拷贝呢?
于是乎我们定义了memcpy和memmove函数
memcpy
void * memcpy ( void * dst, const void * src, size_t count)
{
void * ret = dst;
assert(dst);
assert(src);
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}
以上为实现memcpy的代码,但是相信大家能显而易见的发现此函数没办法实现内存重叠的复制
例如memcpy(ch+2,ch,20);
所以我们更进一步发明了memmove函数
memmove
void* my_memmove(void* dest, void* src, size_t count)
{
assert(dest && src);
void* s1 = dest;
/*从前向后拷贝*/
if (dest < src)
{
while (count--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
/*从后向前拷贝*/
else
{
while (count--)
{
*((char*)dest+count)= *((char*)src + count)
}
}
return s1;
}