一、memcpy
1.函数认识
函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
这个函数在遇到 ‘\0’ 的时候并不会停下来。
如果source和destination有任何的重叠,复制的结果都是未定义的。
函数使用:
2.函数的模拟实现
下面是函数模拟实现代码:
void* my_memcpy(void* dest,const void* src, size_t num)
{
assert(dest&&src);
char* p1 =(char*) dest;
char* p2 = (char*)src;
while (num--)
{
*p1= *p2;
p1++;
p2++;
}
return dest;
}
二、memmove
1.函数认识
memmove和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
如果源空间和目标空间出现重叠,就得使用memmove函数处理。
函数使用:
2.函数的模拟实现
下面是函数模拟实现代码:
void* my_memmove(void* p1, const void* p2, size_t num)
{
void* ret = p1;
if (p1 < p2)
{
int i = 0;
for (i = 0; i < num; i++)
{
*((char*)p1 + i) = *((char*)p2 + i);
}
}
else
{
while (num--)
{
*((char*)p1 + num) = *((char*)p2 + num);
}
}
return ret;
}
三、memcmp
memcmp:比较从ptr1和ptr2指针开始的num个字节。
函数使用: