【无标题】

本文详细介绍了如何在C语言中使用自定义的my_memcpy函数处理两个数据内存可能存在交集或不存在交集的情况,包括代码实现、内存操作和在CLion环境中的编译过程。
摘要由CSDN通过智能技术生成

1.代码实现C语言库函数memcpy(两个数据内存不存在交集)
代码在clion软件通过编译

memcpy函数不限制原数据类型和目标数据类型 只是操作用户输入的内存空间的数据

#include<stdio.h>
#include<assert.h>
void * my_memcpy(void *des,const void *src,size_t number)
{
    assert(des!=NULL);//假如指针是空直接不执行下面代码的操作
    assert(src!=NULL);
    char *arr=des;
    while(number--)
    {
       *(char*)des=*(char*)src;
        (char*)des++;
        (char*)src++;
    }
    return arr;
}
int main(){
    int arr1[10]={1,2,3,4,5,6,7};
    int arr2[10]={0};
    my_memcpy(arr2,arr1,sizeof(arr1));
    for(int x=0;x<9;x++)
    printf("%d\n",arr2[x]);
    return 0;
}

2.代码实现C语言库函数memcpy(两个数据内存存在交集)
代码在clion软件通过编译

#include<stdio.h>
#include<assert.h>
void * my_memcpy(void *des,const void *src,size_t number)
{
    assert(des!=NULL);
    assert(src!=NULL);
    char *arr=des;
    //假如目的空间在源空间之前可以依次将源头数据复制到目的空间
    if(*(char*)des<*(char*)src) {
        while (number--) {
            *(char *) des = *(char *) src;
            (char *) des++;
            (char *) src++;
        }
    }
    //假如目的空间在源空间之后则要考虑到源空间处的数据会在依次复制中
    //改变,那便需要将重叠部分的内容先移到目的空间最后
    
//| ① | ② | ③ | ④ | ⑤ |
//|---src-----| 需要先将③移动到⑤的位置 
//       |--des--|依次复制的顺序③->⑤ ②->④ ①->③

    else{
        while (number--) {
            *((char *) des+number) = *((char *) src+number);}
    }
    return arr;
}
int main(){
    int arr1[10]={1,2,3,4,5,6,7,8,9,10};
    my_memcpy(arr1,arr1+2,20);
    for(int x=0;x<10;x++)
    printf("%d\n",arr1[x]);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值