思路:若目的地址小于源地址,则从前向后拷贝;反之从后向前拷贝。

强制转换为char*而不是int*的原因:int是4字节,char是1字节,若传值num为非4的倍数,则无法完整拷贝内容

错误:

1.第二个while里str1和str2分别加num后没有整体括起来再解引用,导致报错

2.第二个while中没有删除str自加的表达式

#includevoid* my_memmove(void* str2, const void* str1, size_t num){void* ret = str2;assert(str1 && str2);//前向后if (str2 < str1){while (num--){*(char*)str2 = *(char*)str1;str2 = (char*)str2 + 1;str1 = (char*)str1 + 1;}}//后向前else{while (num--){*((char*)str2 + num) = *((char*)str1 + num);}}return ret;}int main(){int arr1[7] = { 1,2,3,4,5,6,7 };int arr2[7] = { 0 };//my_memcpy(arr2, arr1, 20);my_memmove(arr1+2, arr1+1, 12);for (int i = 0; i < 7; i++){printf("%d ", arr1[i]);}return 0;}