C语言memcpy与memmove

news2024/11/19 14:33:16

C语言memcpy与memmove

memcpy

memcpy函数原型

void* memcpy(void* dst,const void* src,size_t size);//const修饰src,表示不应该修改src指向的数据

memcpy用于实现数据的拷贝操作,将src往后的size字节数据拷贝到dst指向的空间
在这里插入图片描述

memcpy的实现:

void* memcpy(void* dst,const void* src,size_t size){
    void* ans=dst;//memcpy函数返回初始的目的地址
    for(int i=0;i<size;i++){
        dst[i]=src[i];
    }
    return ans;
}

上述实现在大部分数据拷贝场景下都是有效的,早期C语言中的memcpy也基本按照上述方式进行实现,但是当src与dst指向的内存区域出现重叠时,就可能会出现问题。

在这里插入图片描述

若memcpy的实现方式如上,在从前向后进行拷贝的时候会存在数据覆盖的问题,那么系统的memcpy函数是否解决了数据覆盖的问题呢?

在这里插入图片描述

在比较新的C语言标准中,memcpy函数解决了数据覆盖的问题,不过在早期C语言标准中,解决类似的问题需要使用memmove函数

memmove

memmove函数与memcpy函数功能类似,不过memmove函数在数据拷贝这件事情上考虑的更加周全,当src>dst时,memmove的拷贝策略是从前往后,当src<dst时,memmove的拷贝策略是从后往前

在这里插入图片描述

memmove函数的实现:

void* memmove(void* dst,const void* src,size_t size){
    char* ans=(char*)dst;
    if(dst>src){//从后向前拷贝
        char* newSrc=(char*)src+size-1;
        char* newDst=(char*)dst+size-1;
        while(size--){
            *newDst=*newSrc;
            newDst--;
            newSrc--;
        }
    }else{//从前向后拷贝
        for(int i=0;i<size;i++){
            dst[i]=src[i];
        }
    }
    return ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/955713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

头歌MYSQL——课后作业1 数据库和数据表的建立、修改和删除

第1关&#xff1a;建立数据库 任务描述 本关任务&#xff1a;建立数据库 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 如何创建数据库&#xff0c;显示已经建立的数据库 相关知识 创建数据库 创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理。 命令格…

Android片段

如果你希望应用根据不同的环境有不同的外观和行为&#xff0c;这种情况下就需要片段&#xff0c;片段是可以由不同活动重用的模块化代码组件。 片段&#xff08;Fragment&#xff09;是活动&#xff08;Activity&#xff09;的一种模块化部分&#xff0c;表示活动中的行为或界面…

日本”闲鱼“Mercari煤炉是什么?如何做?

相信做跨境的小伙伴经常听到一个平台&#xff1a;日本煤炉。这是一个跨境电商平台&#xff0c;那么它是什么样的跨境电商平台呢&#xff1f;这个平台好做吗&#xff1f;如何卖货&#xff1f;带着这些问题&#xff0c;接下来小编为大家详细的讲解&#xff0c;帮助大家更好的更了…

开关电源传导发射

开关电源相较于传统的线性电源&#xff0c;具有工作效率高&#xff0c;体积小的优点&#xff0c;因此获得了广泛的应用。但是由于其内部开关管不停的通断&#xff0c;产生了大的du/dt&#xff0c;因此开关电源是产生传导发射的一个主要噪声源&#xff0c;并且由于与电源线直接连…

快速了解状态管理库Pinia及其使用方法

目录 1.pinia是什么 2.为什么要使用pinia 3.pinia的优点 4.pinia在项目中使用 ①创建一个使用pinia的Vue3项目 ②在页面使用store 1.pinia是什么 Pinia 起源于一次探索 Vuex 下一个迭代的实验&#xff0c;如果你学过Vue2&#xff0c;那么你一定使用过Vuex。Vuex在Vue2中主…

《让你的沟通结构化》考试试题及答案截图

中电金信新员工入职培训选修课《让你的沟通结构化》考试答案截图

基于STM32F103C8T6的系统板设计

针对兆易创新旗下型号GD32F103C8T6(兼容STM32F103C8T6)芯片设计的方案验证板,整板由micro USB供电通过1117稳压管稳压输出3.3V供电,中间配备唤醒按键和复位按键,两侧是从芯片引脚引出的IO口用于调试,其中有3.3V、5V电压选择,BOOT0模式选择,SWD调试接口,电源指示灯以及…

二、Mycat2 相关概念及读写分离

第三章 Mycat2 相关概念 3.1 概念描述 1、分库分表 按照一定规则把数据库中的表拆分为多个带有数据库实例,物理库,物理表访问路 径的分表。 解读&#xff1a;分库&#xff1a;一个电商项目&#xff0c;分为用户库、订单库等等。 分表&#xff1a;一张订单表数据数百万&#xff…

时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测

时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测&a…

LoRA大模型加速微调和训练算法解读

理论 Lora( Low-Rank Adaotation)&#xff0c;低秩自适应模型微调的方法&#xff0c;它冻结预训练模型的权重&#xff0c;并将可训练的秩分解矩阵注入到transformer架构的每一层&#xff0c;从而大大减少下游任务的可训练参数的数量&#xff0c; 怎么微调下游任务:利用LoRA对…

1.Python操作txt文本

文章目录 1.Python读取一个txt文件的内容并将其写入到另一个txt文件2.Python读取一个未知编码的文件并将其设置为指定编码格式3.Python实现txt文件中字符串的替换 1.Python读取一个txt文件的内容并将其写入到另一个txt文件 # -*- encoding:gb2312 -*- import chardetdef read_…

WebSocket 协议及其使用案例

文章目录 前言一、初识 WebSocket 协议1.1 什么是 WebSocket 协议1.2 WebSocket 与 HTTP 的关系1.3 WebSocket 握手的过程1.4 WebSocket 解决了什么问题 二、WebSocket 数据帧格式2.1 WebSocket 数据帧格式图示2.2 各字段的详细说明 三、SpringBoot 项目中引入 WebSocket3.1 创…

Meta语言模型LLaMA解读:模型的下载部署与运行代码

文章目录 llama2体验地址模型下载下载步骤准备工作什么是Git LFS下载huggingface模型 模型运行代码 llama2 Meta最新语言模型LLaMA解读&#xff0c;LLaMA是Facebook AI Research团队于2023年发布的一种语言模型&#xff0c;这是一个基础语言模型的集合。 体验地址 体验地址 …

分布式锁实现一. 利用Mysql数据库update锁

文章目录 分布式锁1、什么是分布式锁&#xff1a;2、分布式锁应该具备哪些条件&#xff1a; 基于数据库的分布式锁代码传送代码运行 分布式锁 1、什么是分布式锁&#xff1a; 分布式锁&#xff0c;即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资源访问的问题…

hp惠普光影精灵5笔记本HP Pavilion Gaming-15-dk0135tx原装出厂Win10系统

原厂系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、惠普电脑管家等预装程序 适用型号&#xff1a; 15-dk0011tx,15-dk0018tx,15-dk0019tx,15-dk0020tx,15-dk0021tx,15-dk0038tx 15-dk0039tx,15-dk0040tx,15-dk0041tx,15-dk0125tx,15-dk0126tx,15-dk0127tx 15-dk012…

Python Opencv实践 - 霍夫线检测(Hough Lines)

import cv2 as cv import numpy as np import matplotlib.pyplot as plt import randomimg cv.imread("../SampleImages/GreenBoard.jpg") print(img.shape) plt.imshow(img[:,:,::-1])#将图像转为二值图 gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) plt.imshow(gra…

【【萌新的STM32学习25--- USART寄存器的介绍】】

萌新的STM32学习25- USART寄存器的介绍 STM32–USART寄存器介绍&#xff08;F1&#xff09; 控制寄存器1 &#xff08;CR1&#xff09; 位13&#xff1a; 使能USART UE 0&#xff1a; USART分频器和输出被禁止 1&#xff1a; USART模块使能 位12 &#xff1a; 配置8个数据位…

正中优配:股票xd什么意思

作为本钱市场中的重要一环&#xff0c;股票出资已经成为现代个人和组织出资的重要挑选之一。而在股票出资中&#xff0c;出资者常常会看到股票的价格上出现"xd"字样&#xff0c;这时候不少出资者就会疑问&#xff0c;这个"xd"到底是什么意思&#xff1f;对…

Java“牵手”1688整店商品API接口数据,通过店铺ID获取整店商品详情数据,1688店铺所有商品API申请指南

1688平台店铺所有商品数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688整店的商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、价格信息等详细信息 。 获取店铺所有商品接口API是一种用于获取电商平台上商品详…

骨传导耳机音质怎么样、十大公认音质好的骨传导耳机推荐

骨传导耳机的音质相比传统的耳塞式或耳罩式耳机会有所不同。下面是骨传导耳机音质和入耳式耳机音质的区别&#xff1a; 1、低频听感&#xff1a; 相对传统耳机而言&#xff0c;骨传导耳机的低频响应可能稍显不足。由于声音是通过振动传输到内耳&#xff0c;而不是通过直接振动…