一.memcpy模拟实现
1.memcpy
void* memcpy(void* str1, const void *str2, size_t n)
2.my_memcpy
void* my_memcpy(void* arr1, const void* arr2, size_t num)
{
assert(arr1 && arr2);//判断传址数组是否为空
char* str1 = (char*)arr1;
const char* str2 = (const char*)arr2;
//实现过程
for (size_t i = 0; i < num; i++)
*str1++ = *str2++;
return;
}
二.memmove模拟实现
1.memmove
void *memmove(void *str1, const void *str2, size_t n)
2.my_memmove
void* my_memmove(void* arr1, const void* arr2, size_t num)
{
assert(arr1 && arr2);//判断是否为空指针
char* str1 = (char*)arr1;
const char* str2 = (const char*)arr2;
//实现过程
if (str1 < str2)
{
while (num--)
*(str1++) = *(str2++);
}
else
{
while (num)
{
*(str1 + num - 1) = *(str2 + num - 1);
num--;
}
}
return;
}
三.举例使用
1.memcpy与my_memcpy的使用
int main()
{
char arr1[] = "I Love China";
char arr_1[] = "I Love China";
char arr2[20];
char arr_2[20];
my_memcpy(arr2, arr1 + 7, 6);
memcpy(arr_2, arr_1 + 7, 6);
printf("%s\n", arr2);
printf("%s\n", arr_2);
}
其结果为:
China(memcpy模拟函数实现)
China(memcpy函数实现)
2.memmove与my_memmove的使用
int main()
{
char arr1[] = "abcdefg";
char arr2[] = "abcdefg";
my_memmove(arr1 + 3, arr1 + 2, sizeof(char) * 3);
memmove(arr2 + 3, arr2 + 2, sizeof(char) * 3);
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
其结果为:
abccdeg(memmove模拟函数实现)
abccdeg(memmove函数实现)