memcpy,memmove它们的功能是拷贝源头的数据到目标空间里,和strcpy的区别是,strcpy只能作用于字符串,而前者可以作用于任何类型的数据,
下面看memcpy的实现:
void* my_memcpy(void*a1,const void*a2,int n)//形参设计成void*类型 可以接受任意类型的数据
{
void*p=a1;
assert(a1 && a2);//使用之前断言一下,代码更健壮
while (n--)
{
*(char*)a1 = *(char*)a2;
a1=(char*)a1 + 1;
a2=(char*)a2 + 1;
}
return p;
}
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[] = { 2,2,3,4,7 };
my_memcpy(arr1,arr2,20);//注意第三个参数单位是字节
for (int i = 0; i < 5; i++) //打印
{
printf("%d ", arr1[i]);
}
return 0;
}
再看memmove的实现:
void* my_memmove(void* a1, void* a2, int n)
{
void*p=a1;
assert(a1 && a2);
if (a1 < a2)
{
while (n--)
{
*(char*)a1 = *(char*)a2;
a1 = (char*)a1 + 1;
a2 = (char*)a2 &