1.memcpy
void * memcpy ( void * destination, const void * source, size_t num );
函数作用:把从source开始的num个字节的内容拷贝到从destination开始的空间里。返回destination的起始地址。
优点:相比于strcpy,可以处理更多类型的数据。
警示:最好不要用来处理重叠内存,可能会在拷贝过程中发生重叠使得结果不符合预期。
函数模拟实现:
//模拟实现memcpy
void* my_memcpy(void* dest, const void* src, size_t num)
{
void* ret = dest;
assert(dest && src);
while (num--)//先使用,再--
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
2.memmove
void*memmove ( void*destination, constvoid*source, size_tnum );
相对于memcpy,可以处理重叠内存的拷贝。参数完全相同。用法也相同。
函数模拟:需要根据源头和目的地的先后位置关系来分类讨论。
//模拟实现memmove
void* my_memmove(void* dest, const void* src, size_t num)
{
void* ret = dest;
assert(dest && src);
if (dest < src)//前到后
{
while (num--)//先使用,再--
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
else//后到前
{
*((char*)dest + num) = *((char*)src + num);
}
return ret;
}
3.memset
以字节为单位设置内存。
使用方法:假设有一个字符串叫arr,把她从第四个位置开始的六个字节大小的空间的内容都放上x。
memset(arr+3,'x',6);
4.memcmp
int memcmp ( const void* ptr1,const void* ptr2,size_t num );
比较从ptr1和ptr2指针开始的num个字节。返回值的规律类似于strcpy。