贵阳市网站开发,建设局网站更改法人所需材料,app定制公司哪家好,网站淘宝客怎么做的函数作用#xff1a;从sourse的位置开始向后复制num个字节到desttintion指向的内存位置#xff0c;#xff08;运用于字符时#xff0c;遇到\0不会停止#xff09;#xff0c;这个函数支持重叠部分的复制#xff0c;是memcpy函数的改进版本
具体步骤#xff1a;
1从sourse的位置开始向后复制num个字节到desttintion指向的内存位置运用于字符时遇到\0不会停止这个函数支持重叠部分的复制是memcpy函数的改进版本
具体步骤
1函数定义
需要两个指针分别指向起始位置和目标空间位置还有复制的字节数字节数不是元素个数
返回值是目标位置的起始位置 2因为可以复制重叠部分所以需要进行判断
这里我用同一个数组进行举例
1234567891012345678910
1如果deststr,按照普通的步骤进行就可以完成任务
2如果deststr,按照顺序就会发生错误
如果从后往前进行拷贝可以避免这种结果
3最后进行代码优化
str指向的空间是不用进行修改的所以指针用const修饰防止传进去空指针用assert函数
#define _CRT_SECURE_NO_WARNINGS 1#include assert.h
#include stdio.h
#include string.hvoid* my_memmove(void* dest, const void* str, size_t num)
{void* ret dest;assert(dest str);if (dest str){while (num--){*(char*)dest *(char*)str;dest ((char*)dest);str ((char*)str);}}else{while (num--){*((char*)dest num) *((char*)str num);}}return dest;
}int main()
{int arr[] { 1,2,3,4,5,6,7,8,9,10};my_memmove(arr3, arr , 20 );for (int i 0; i 10; i){printf(%d , arr[i]);}printf(\n);return 0;
}