memcpy
使用:拷贝数据
void * memcpy( void *destination,const void * source, size_t num );
- 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
- 这个函数在遇到'\0’的时候并不会停下来。
- 如果source和destination有任何的重叠,复制的结果都是未定义的。

模拟:
void*my_memcpy(void*dest,const void*src,int num)
{
assert(dest&&src);
void*ret = dest;
while(num--){
*(char*)dest = *(char*)src;//强制类型转换成(char*),使其一次拷贝一个字节
dest = (char*)dest+1;
src = (char*)src+1;
}
return ret;
}
memmove
使用:与memcpy相似
void *memmove( void*destination,const void*source, size_t num );
- 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
- 如果源空间和目标空间出现重叠,就得使用memmove函数处理。

模拟:
void*my_memmove(void*dest,const void*src,int num)
{
if(dest<src)
{
//从前先后
while(num--){
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src+1;
}
}
else
{
//从后向前
while(num--)
{
*((char*)dest+num) = *((char*)src+num);
}
}
}
memset
使用:内存设置
void*memset(void*ptr,int value,size_tnum );
- memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。

memcmp
使用:
int memamp(const void*ptrl,const void* ptr2, size_t num );
- 比较从ptr1和ptr2指针指向的位置开始,向后的num个字节

1681

被折叠的 条评论
为什么被折叠?



