- memcpy
- memmove
- memset
- memcmp
void* memcpy( void* dest, const void* sour, size_t num )
函数功能:
- 在缓冲区之间复制字符。
函数返回值:
- 返回 dest 的值。
说明:
- 从 sour 的位置开始向后复制 num 个字符的数据到 dest 的内存位置。
- memcpy() 遇到 ‘ ’ 不会停止复制。
- 如果 sour 和 dest 有任何的重叠,复制结果都是未定义的。
函数实现:
void* my_memcpy(void* dest, const void* sour, size_t num)
{
assert(dest != NULL);
assert(sour != NULL);
//复制
void* ret = dest;
while (num--)
{
*(char*)dest = *(char*)sour;
dest = (char*)dest + 1;
sour = (char*)sour + 1;
}
return ret;
}
memmove
void* memmove( void* dest, const void* sour, size_t num )
函数功能:
- 将一个缓冲区移动到另一个缓冲区。
函数返回值:
- 返回 dest 的值。
说明:
- memmove() 和 memcpy() 的差别是 memmove() 处理的源内存块和目标内存块可以重叠。
- 如果源空间和目标空间出现重叠,就得使用 memmove() 处理。
函数实现:
void* my_memmove(void* dest, const void* sour, size_t num)
{
assert(dest != NULL);
assert(sour != NULL);
//移动
void* ret = dest;
if (dest <= sour || (char*)dest >= ((char*)sour + num))
{
while (num--)
{
*(char*)dest = *(char*)sour;
dest = (char*)dest + 1;
sour = (char*)sour + 1;
}
}
else
{
//倒序拷贝
dest = (char*)dest + (num - 1);
sour = (char*)sour + (num - 1);
while (num--)
{
*(char*)dest = *(char*)sour;
dest = (char*)dest - 1;
sour = (char*)sour - 1;
}
}
return ret;
}
memset
void* memset( void* dest, int c, size_t num );
函数功能:
- 将缓冲区设置为指定的字符。
函数返回值:
- 返回 dest 的值。
说明:
- memset() 将从 dest 开始的 num 个字节设置为字符 c 。
int memcmp( const void* ptr1, const void* ptr2, size_t num )
函数功能:
- 比较两个缓冲区中的字符。
函数返回值:
- 从 ptr1 指针开始的 num 个字节大于从 ptr2 指针开始的 num 个字节,则返回大于 0 的数字;
- 从 ptr1 指针开始的 num 个字节等于从 ptr2 指针开始的 num 个字节,则返回 0 ;
- 从 ptr1 指针开始的 num 个字节小于从 ptr2 指针开始的 num 个字节,则返回小于 0 的数字。
说明:
- 比较 ptr1 指针和 ptr2 指针开始的 num 个字节。



