作用:从source的位置开始向后复制num个字节的数据到destination的内存位置。
注意:
1.这个函数在遇到’\0’的时候不会停下来。
2.如果destination复制到source中后方重叠(应该使用memmove),复制的结果都是未定义的。
3.前方重叠应该使用memcpy,不可用memmove。
实现机制:因为这个函数使用了void* 所以不能够解引用复制,所以应该先进行对指针的强转操作()。使用循环对源字符串的每一个字符进行复制到目标字符数组中,返回目标字符串的首地址。
函数实现:
const void* my_memcpy(void* dest, const void* src,size_t num)
{
assert(dest != NULL && src != NULL);
void* ret = dest;
for (size_t i = 0; i < num; ++i)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
参考代码:
#include <stdio.h>
#include <assert.h>
const void* my_memcpy(void* dest, const void* src,size_t num)
{
assert(dest != NULL && src != NULL);
void* ret = dest;
for (size_t i = 0; i < num; ++i)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
char arr1[10] = "abcde";
char arr2[10] = { 0 };
my_memcpy(arr2,arr1,sizeof(arr1));
printf("%s\n",arr2);
return 0;
}
运行结果展示: