- memmove 是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。
- void *memmove( void* dest, const void* src, size_t count );
NOTE:
- 它的返回值是void*,参数类型也是void*,这样它才可以处理不同类型的数据。
- 目标dest不能加const,源src加const。原因是我们需要从源src中拷贝数据到dest中,需要对dest进行赋值。若用const保护dest,便不能完成赋值操作。
- memmove的好处是可以处理dest与src发生内存重叠的情况。
void* memmove(void* dst,const void* src,size_t count)
{
void* ret = dst;
//dst <= src表示,如果dst在src的前面,从前往后复制不会覆盖src中还没有复制的内容
if (dst <= src || (char*)dst >= ((char*)src + count))
{
//从前往后复制,不会出现覆盖src中没有复制的内容
while(count--)
{
*(char*)dst = *(char*)src; //char类型指针,表示一个字节一个字节的复制
dst = (char*)dst + 1; //移动一个字节
src = (char*)src + 1;
}
}
else
{
//从后往前复制,不会出现覆盖src中没有复制的内容
dst = (c