memcpy模拟实现
#include<stdio.h>
void* my_memcpy(void *str1, void* str2,size_t size)
{
void* ret = str1;
while (size)
{
*(char*)str1 = *(char*)str2;
str1 = (char*)str1 + 1;
str2 = (char*)str2 + 1;
size--;
}
return ret;
}
当我们想要拷贝除字符串的其他类型,在这时候strcpy就用不了,我们就可以考虑使用memcpy,并且需要传递具体大小。
memmove模拟实现
void* my_memmove(void* str1,const void* str2, size_t count)
{
void* ret = str1;
if (str1 < str2)
{
while (count--)
{
*(char*)str1 = *(char*)str1;
str1 = (char*)str1 + 1;
str2 = (char*)str2 + 1;
}
}
else
{
str1 = (char*)str1 + count - 1;
str2 = (char*)str2 + count - 1;
while (count--)
{
*(char*)str1 = *(char*)str2;
str1 = (char*)str1 - 1;
str2 = (char*)str2 - 1;
}
}
return ret;
}
这个函数就是实现将一段函数内容从一个位置移动到另外一个位置,即使有所重叠也要完成内存复制的功能。
我们有两种结局方式,一个是从前向后拷贝,另外一个是从后向前拷贝。
如图,当str1小于str2时,从str2前往后拷贝便不会出现重叠现象。
如图,当str1大于str2时,从str2后往前拷贝便不会出现重叠现象。