本章主要概述C语言内存函数的使用和部分模拟实现
memcpy
void * memcpy ( void * destination, const void * source, size_t num );
该函数主要的作用是将两个不同地址的变量按照字节数进行拷贝,如果变量的地址相同,那么就会发生不安全的隐患,所以程序员必须知道该函数底层实现!
memcpy实现
代码
使用void*进行接收dest和src,将dest和src强转成char*型方便按字节进行操作。
void* my_memcpy(void* dest, void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
while (num--) {
*(char*)dest = *(char*)src;
((char*)dest)++;
((char*)src)++;
}
return ret;
}
memmove
void * memmove ( void * destination, const void * source, size_t num );
memcpy的差别就是memmove函数处理的src内存块和dest内存块是可以重叠的。如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。
memmove实现
void* my_memmove(void* dest, void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
if (dest < src) {
while (num--) {
*(char*)dest = *(char*)src;
((char*)dest)++;
((char*)src)++;
}
}
else {
while (num--) {
*((char*)dest + num) = *((char*)src + num);
}
}
return ret;
}
memcmp
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节
返回值如下
样例:
memset
void * memset ( void * ptr, int value, size_t num );
memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。一般用来清空内存。
测试样例入下:
![](https://img-blog.csdnimg.cn/direct/abd31347cff8489f8c682dec0cab90ba.png)