做名片制作网站有什么关联词有哪些
函数作用:从sourse的位置开始向后复制num个字节到desttintion指向的内存位置,(运用于字符时,遇到\0不会停止),这个函数支持重叠部分的复制,是memcpy函数的改进版本
具体步骤:
1:函数定义:
需要两个指针,分别指向起始位置和目标空间位置,还有复制的字节数(字节数,不是元素个数)
返回值是目标位置的起始位置
2:因为可以复制重叠部分,所以需要进行判断
这里我用同一个数组进行举例
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1)如果dest<str,按照普通的步骤进行就可以完成任务
2)如果dest>str,按照顺序就会发生错误
如果从后往前进行拷贝,可以避免这种结果
3:最后进行代码优化
str指向的空间是不用进行修改的,所以指针用const修饰,防止传进去空指针,用assert函数
#define _CRT_SECURE_NO_WARNINGS 1#include <assert.h>
#include <stdio.h>
#include <string.h>void* 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(arr+3, arr , 20 );for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}