memmove库函数模拟实现
Posted zhm521
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memmove库函数模拟实现相关的知识,希望对你有一定的参考价值。
//第一次尝试:
#include<stdio.h> #include<stdlib.h> void* myMemmove(void* destin, const void* source,size_t num) { if (destin == NULL || source == NULL) { return NULL; } char* sour = (char*)source; char* dest = (char*)destin; if (dest > sour && dest < (sour + num)) { for (int i = num - 1; i >= 0; i--) { *(dest + i)= *(sour + i); } } else { for (int i = 0; i < num; i++) { *(dest + i) = *(sour + i); } } return destin; } int main() { int arr[4] = { 1,2,3,4 }; int arr1[4] = { 0 }; myMemmove(arr1, arr, sizeof(arr)); for (int i = 0; i < 4; i++) { printf("%d ", arr1[i]); }printf(" "); return 0; }
//本代码实现了memmove的功能,主要就是要理解,当两个字段空间重叠时,就需要从后往前拷贝
//此处空间重叠并不是只要目标和源有重叠就算,而是如果目标的头部重叠在了源中,那么才算重叠,这点要想清楚,才能实现这个功能
以上是关于memmove库函数模拟实现的主要内容,如果未能解决你的问题,请参考以下文章
模拟实现部分库函数(strcpy,strcmp,strcat,strstr,memcpy,memmove,memset)