当前位置: 首页 > news >正文

memmove重叠字符串拷贝的介绍和模拟实现

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>

//memmove重叠内存拷贝
//用来实现重叠内存之间的数据拷贝

int main()
{
    int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
    memmove(arr1 + 2, arr1, 20);
    //1 2 1 2 3 4 5 8 9 10
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr1[i]);
    }

    return 0;
}

//memmove的模拟实现

#include <assert.h>
void* my_memmove(void* dest, const void* src, size_t num)
{
    assert(dest && src);
    void* ret = dest;
    if (dest < src)
    {
        //从前向后拷贝
        void* ret = dest;
        while (num--)
        {
            *(char*)dest = *(char*)src;
            dest = (char*)dest + 1;
            src = (char*)src + 1;
        }
        return ret;
    }
    else
    {
        //从后向前拷贝
        while (num--)
        {
            *((char*)dest + num) = *((char*)src + num);//num此时为19个字节,再减减变成18,以此类推
        }
    }
    return ret;
}

int main()
{
    int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
    //my_memmove(arr1+2, arr1, 20); 
    //1 2 1 2 3 4 5 8 9 10
    my_memmove(arr1, arr1+2, 20); 
    //3 4 5 6 7 6 7 8 9 10
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr1[i]);
    }

    return 0;
}


http://www.mrgr.cn/news/74761.html

相关文章:

  • 【Java】二叉树:数据海洋中灯塔式结构探秘(上)
  • Java中的线程池(如果想知道Java中有关线程池的知识,那么只看这一篇就足够了!)
  • STM32设计学生宿舍监测控制系统-分享
  • C# 数据结构之【图】C#图
  • USRP:B205mini-i
  • 【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解
  • 河南测绘资质办理技巧分享
  • 《AudioCLIP: Extending CLIP to Image, Text and Audio》中文校对版
  • Android15之SparseArray、HashMap、Map用法实例(二百三十八)
  • 基于SpringBoot智慧社区管理平台
  • 丹摩征文活动|丹摩智算平台使用指南
  • 新书速览|Python数据科学加速:Dask、Ray、Xorbits、mpi4py
  • 【JAVA毕业设计】基于Vue和SpringBoot的宠物咖啡馆平台
  • 网络基础 - 网段划分篇
  • 2024年,有多少程序员被迫转行?
  • WeakHashMap原理
  • 数据结构PTA
  • 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测
  • nginx代理后jsp如何获取http协议
  • DNS服务器Mac地址绑定与ip网路管理命令(Ubuntu24.04)
  • Oauth2.0
  • Java复习44(PTA)
  • 2024算法基础公选课练习三(DFS1)(1)
  • 全国交通安全日知识竞赛答题投票活动策划
  • 基于AX650N/AX630C部署多模态大模型InternVL2-1B
  • 华为OD机试真题---数组二叉树