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

C语言memcpy,memmove的介绍及模拟实现

文章目录

  • 每日一言
  • memcpy
    • 介绍
    • 模拟实现
  • memmove
    • 介绍
    • 模拟实现
      • 思路
      • 代码
  • 结语

每日一言

If you want to lift yourself up, lift up someone else.
如果你想振奋自己, 先振奋周遭的人。

memcpy

介绍

函数原型:

void *memcpy(void *dest, const void *src, size_t n);

其中,dest是指向目标内存地址的指针,src是指向源内存地址的指针,n是要复制的字节数。
memcpy函数的工作原理是直接从源内存地址复制指定数量的字节到目标内存地址,可以高效地进行大量数据的复制操作,并且在操作过程中不会改变目标内存地址中的数据类型。

在使用memcpy函数时需要注意源内存地址和目标内存地址之间不能有重叠,否则会产生未定义的行为。

模拟实现

void* my_memcpy(void*dest,const void*arr,size_t num)
{for (int i = 0; i < num; i++){*((char*)dest + i) = *((char*)arr + i);}return dest;
}

memmove

介绍

函数原型:

void *memmove(void *dest, const void *src, size_t n);

其中,dest 表示目标内存地址,src 表示源内存地址,n 表示要移动的数据字节数。
memmove 函数会将 src 指向的内存中的数据复制到 dest 指向的内存中,共复制 n 个字节。在复制过程中,如果 src 与 dest 所指内存区域有重叠,memmove 函数会正确处理数据,避免出现数据损坏的情况。

模拟实现

思路

  1. 判断源地址和目标地址的大小。
  2. 根据复制方向,选择正确的复制方式。
    如果源地址小于目标地址,则从后往前拷贝。
    如果源地址大于目标地址,则从前往后拷贝。
  3. 返回目标内存区域的起始地址。

代码

void* my_memmove(void* dest, const void* arr, size_t num)
{if (dest<arr){for (int i = 0; i < num; i++){*((char*)dest + i) = *((char*)arr + i);}}else{while (num--){*((char*)dest + num) = *((char*)arr + num);}}return dest;
}

结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
想成为大佬那就保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


相关文章:

C语言memcpy,memmove的介绍及模拟实现

文章目录 每日一言memcpy介绍模拟实现 memmove介绍模拟实现思路代码 结语 每日一言 If you want to lift yourself up, lift up someone else. 如果你想振奋自己&#xff0c; 先振奋周遭的人。 memcpy 介绍 函数原型&#xff1a; void *memcpy(void *dest, const void *sr…...

克服.360勒索病毒:.360勒索病毒的解密和预防

导言: 在数字化的今天&#xff0c;数据安全问题变得愈发棘手。.360勒索病毒是当前网络空间的一场潜在灾难&#xff0c;对于这个威胁&#xff0c;了解应对之道和采取切实的预防措施至关重要。如果您正在经历勒索病毒的困境&#xff0c;欢迎联系我们的vx技术服务号&#xff08;s…...

21、Resnet50 中包含哪些算法?

(本文已加入“计算机视觉入门与调优”专栏,点击专栏查看更多文章信息) 这一节汇总一下resnet50 中包含的算法,并且简单介绍。 总共卷积算法、激活算法(relu)、最大池化算法、加法(主要是为了实现残差结构)、全局平均池化、全连接和 softmax 算法这几种算法。 卷积 卷…...

pybind11教程

pybind11教程 文章目录 pybind11教程1. pybind11简介2. cmake使用pybind11教程3. pybind11的历史 1. pybind11简介 项目的GitHub地址为&#xff1a; pybind11 pybind11 是一个轻量级的头文件库&#xff0c;用于在 Python 和 C 之间进行互操作。它允许 C 代码被 Python 调用&am…...

Java基础- 自定义类加载器

自定义类加载器 在 Java 中实现自定义类加载器通常涉及继承 ClassLoader 类并重写其 findClass 方法。自定义类加载器允许我们从非标准来源&#xff08;如网络、加密文件或其他媒体&#xff09;加载类。下面是实现自定义类加载器的基本步骤&#xff1a; 1. 继承 ClassLoader …...

2022年高校大数据挑战赛A题工业机械设备故障预测求解全过程论文及程序

2022年高校大数据挑战赛 A题 工业机械设备故障预测 原题再现&#xff1a; 制造业是国民经济的主体&#xff0c;近十年来&#xff0c;嫦娥探月、祝融探火、北斗组网&#xff0c;一大批重大标志性创新成果引领中国制造业不断攀上新高度。作为制造业的核心&#xff0c;机械设备在…...

洛谷 P1998 阶乘之和 C++代码

前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;[NOIP1998 普及组] 阶乘之和 - 洛谷 西江月夜行黄沙道中 【宋】 辛弃疾 明月别枝惊鹊&#xff0c;清风半夜鸣蝉。稻花香里说丰年&#xff0c;听取WA声一片。 七八个星天外&#xff0c;两三点雨山前。旧时茅店社林边&…...

洛谷 B2006 地球人口承载力估计 C++代码

目录 前言 思路点拨 AC代码 结尾 前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;地球人口承载力估计 - 洛谷 题目&#xff1a; 思路点拨 经典牛吃草问题。 解设一个人一年吃一份草。 则x*a-y*b为会多出的草&#xff0c;为什么会多呢&#xff1f;是因为每年都有…...

少走弯路:OpenCV、insightface 等多方案人脸推理和识别

脑壳有包又花时间折腾了一下&#xff0c;其实之前也折腾过&#xff0c;主要是新看了一个方法 在下图中查找脸部 第一种方案&#xff1a; 使用了opencv 的cv2.FaceDetectorYN. &#xff0c;完整代码如下&#xff1a; import numpy as np import cv2imgcv2.imread("00000…...

github代码连接vercel 建立一个公用网站

Deploying to the Cloud using Vercel 前置任务 建立一个基于flask的web app代码库并上传至github repo Vercel用途 vercel有点像一个免费的cloud server&#xff0c;帮助你将flask框架下的程序运行在云端。可以public访问。 deploy流程 在主文件夹中建立requirements.tx…...

使用pandas将字符串格式数据转换为单独的行

有时在处理数据时&#xff0c;可能会遇到这样的情况&#xff0c;即数据框中的整个字符串条目需要拆分到不同的行中。这可能是一项具有挑战性的任务&#xff0c;特别是当数据庞大而复杂时。尽管如此&#xff0c;一个名为pandas的Python库提供了各种函数&#xff0c;使用这些函数…...

【Tkinter 入门教程】

【Tkinter 入门教程】 1. Tkinter库的简介&#xff1a;1.1 GUI编程1.2 Tkinter的定位 2. Hello word! 程序起飞2.1 第⼀个程序2.2 字体颜色主题 3. 组件讲解3.1 tkinter 的核⼼组件3.2 组件的使⽤3.3 标签Label3.3.1 标签显示内容3.3.2 多标签的应⽤程序3.3.3 总结 3.4 按钮but…...

深入理解Java中继承的高级使用方案

摘要&#xff1a; 继承是Java中的一项强大的特性&#xff0c;它允许子类从父类中继承属性和方法。然而&#xff0c;继承的高级使用方案涉及更复杂的概念和技术&#xff0c;可以帮助开发人员构建更加灵活、可维护和可扩展的代码。本文将深入探讨Java中继承的高级用法&#xff0c…...

nexus私服开启HTTPS

maven3.8.1以上不允许使用HTTP服务的仓库地址&#xff0c;如果自己搭建的私服需要升级为HTTPS或做一些设置&#xff0c;如果要升级HTTPS服务有两种方式&#xff1a;1、使用Nginx开启HTTPS并反向代理nexus&#xff1b;2、直接在nexus开启HTTPS。这里介绍第二种方式 1、在ssl目录…...

融合CFPNet的EVC-Block改进YOLO的太阳能电池板缺陷检测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着太阳能电池板的广泛应用&#xff0c;对其质量和性能的要求也越来越高。然而&#xff0c;由于生产过程中的各种因素&#xff0c;太阳能电池板上可能存在各种缺…...

传媒行业CRM:打造高效客户管理,提升品牌影响力

传媒行业充满竞争和变化&#xff0c;传媒企业面临着客户管理不透明、业务流程混乱、销售数据分析不足&#xff0c;无法优化营销策略和运营管理等问题。CRM系统是企业实现数智化管理的神器&#xff0c;可以有效解决这些问题。下面说说&#xff0c;传媒行业CRM系统推荐。 1、建立…...

基于深度学习的肺炎CT图像检测诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在肺炎CT图像检测诊断方面具有广泛的应用前景。以下是关于肺炎CT图像检测诊断系统的介绍&#xff1a; 任务…...

YOLOv8改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)

一、本文介绍 本文给大家带来的改进内容是SCConv&#xff0c;即空间和通道重构卷积&#xff0c;是一种发布于2023.9月份的一个新的改进机制。它的核心创新在于能够同时处理图像的空间&#xff08;形状、结构&#xff09;和通道&#xff08;色彩、深度&#xff09;信息&#xf…...

Python 全栈体系【四阶】(一)

四阶&#xff1a;机器学习 - 深度学习 第一章 numpy 一、numpy 概述 Numerical Python&#xff0c;数值的 Python&#xff0c;补充了 Python 语言所欠缺的数值计算能力。 Numpy 是其它数据分析及机器学习库的底层库。 Numpy 完全标准 C 语言实现&#xff0c;运行效率充分优…...

Git【成神路】

目录 1.为啥要学git啊&#xff1f;&#x1f615;&#x1f615;&#x1f615; 2.版本控制软件的基本功能 &#x1f91e;&#x1f91e;&#x1f91e; 3.集中式版本控制 &#x1f936;&#x1f936;&#x1f936; 4.分布式版本控制&#x1f60e;&#x1f60e;&#x1f60e; …...

STM32F407 USART3串口DMA不定长接收与中断发送实战:从零构建高效通信框架

1. 为什么需要DMAUSART组合方案 在嵌入式开发中&#xff0c;串口通信就像设备与外界对话的"嘴巴"和"耳朵"。传统的中断方式就像每次只说一个字就要停下来等回应&#xff0c;效率实在太低。想象一下&#xff0c;如果你跟朋友聊天&#xff0c;每说一个字就要…...

DIY智能烛光发饰:用导电缝纫线制作可穿戴电子入门项目

1. 项目概述&#xff1a;当传统手工艺遇上智能微光几年前&#xff0c;我开始接触可穿戴电子&#xff0c;最初的想法很简单&#xff1a;让日常穿戴的物件不只是静态的装饰&#xff0c;而是能与人产生动态交互的“伙伴”。从在衣服上缝几个会亮的LED&#xff0c;到尝试集成传感器…...

Sunshine自托管游戏串流服务器:构建高性能私人云游戏平台的完整指南

Sunshine自托管游戏串流服务器&#xff1a;构建高性能私人云游戏平台的完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款功能强大的自托管游戏串流服务器&am…...

ClawForgeAI:基于工作流编排的AIGC创意自动化平台解析

1. 项目概述&#xff1a;从“ClawForgeAI/clawforge”看AI驱动的创意工具新范式最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“ClawForgeAI/clawforge”。光看这个名字&#xff0c;你可能会有点摸不着头脑——“ClawForge”听起来像是个游戏模组工具或者某种机械设计软…...

MPLAB® Harmony嵌入式框架实战:从架构解析到项目开发避坑指南

1. 项目概述&#xff1a;从零到一&#xff0c;理解MPLAB Harmony的价值如果你是一位嵌入式开发者&#xff0c;尤其是长期与Microchip的PIC或SAM系列MCU打交道的朋友&#xff0c;那么“MPLAB Harmony”这个名字你一定不陌生。它可能出现在官方文档的角落里&#xff0c;在论坛的讨…...

AI编码工作流实战:从工具整合到工程落地的系统指南

1. 项目概述&#xff1a;从“AI编码工作流”说起 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫 nicksp/ai-coding-workflow 。光看名字&#xff0c;你可能觉得这又是一个关于“如何用AI写代码”的泛泛而谈。但作为一个在软件工程一线摸爬滚打了十多年的老码农&#x…...

AI驱动编辑预设生成:从风格迁移到创意工作流的自动化实践

1. 项目概述&#xff1a;AI驱动的编辑预设库最近在折腾视频和图片后期&#xff0c;发现一个挺有意思的项目&#xff0c;叫kaushalrao/ai-editor-presets。这名字听起来有点技术范儿&#xff0c;但说白了&#xff0c;它就是一个用人工智能技术来生成和优化各类编辑软件预设文件的…...

别只当稳压器用!用LM7805做个简易功放,驱动小喇叭实测(附电路图)

从稳压到扩音&#xff1a;用LM7805打造微型功放的创意实践 1. 重新认识LM7805&#xff1a;不只是稳压芯片 LM7805在电子爱好者心中一直是"稳压神器"的代名词&#xff0c;但鲜少有人意识到这颗经典三端稳压器隐藏的音频放大潜力。当我们撕掉它身上"5V稳压专用&qu…...

从零构建MCP服务:AI Agent扩展与外部工具集成实战

1. 项目概述&#xff1a;从零构建你的第一个MCP服务最近在AI应用开发圈里&#xff0c;MCP&#xff08;Model Context Protocol&#xff09;这个词的热度越来越高。简单来说&#xff0c;它就像是为AI大模型&#xff08;比如Claude、GPTs&#xff09;连接外部工具和数据源的一套“…...

为什么你的v8出图突然“高级感崩塌”?3分钟定位色彩语义锚点失效+实时修复模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的v8出图突然“高级感崩塌”&#xff1f; V8 引擎本身并不直接“出图”——这一表述实为开发者对前端渲染链路中某环节异常的戏谑指代。真正崩塌的&#xff0c;往往是基于 V8 驱动的 Canvas/We…...