库函数memcpy的使用

库函数memcpy是内存函数的拷贝,memcpy的函数参数如下
在这里插入图片描述把源头的指针的值拷贝到目标指针的值中,拷贝是按字节拷贝的,使用方法如下

#include<stdio.h>
#include<string.h>
int main(){int arr1[]={1,2,3,4,5,6,7,8,9,10};int arr2[10]={0};memcpy(arr2,arr1,20);//把arr1中20个字节的内容拷贝到arr2中return 0;
}

模拟实现一下这个库函数

#include<stdio.h>
void* my_memcpy(void* dest,const void* src,size_t num){assert(src&&dest);void* ret=dest;while(num--){*(char*)dest=*(char*)src;dest=(char*)dest+1;src=(char*)src+1;}
}
int main(){int arr1[]={1,2,3,4,5,6,7,8,9,10};int arr2[10]={0};my_memcpy(arr2,arr1,20);//把arr1中20个字节的内容拷贝到arr2中return 0;
}

这里就简单实现了,那么考虑一下,把1,2,3,4,5拷贝到3,4,5,6,7上面呢,如果还用刚刚实现的模拟函数会出现什么问题呢
在这里插入图片描述根据这个运行结果发现,好像根本没拷贝过去,变成了不是我期望的值,这是为什么呢,仔细观察发现,向这种情况不能在从前向后拷贝了,应该是从后往前拷贝,但src<=dest都可以考虑是从后往前拷贝,当src>dest时可以从前往后拷贝,代码如下所示

#include<stdio.h>
void* my_memcpy(void* dest,const void* src,size_t num){assert(src&&dest);void* ret=dest;if(dest<src){while(num--){*(char*)dest=*(char*)src;dest=(char*)dest+1;src=(char*)src+1;}}else{while(num--){*((char*)dest+num)=*((char*)src+num);}}}
int main(){int arr1[]={1,2,3,4,5,6,7,8,9,10};int arr2[10]={0};my_memcpy(arr2,arr1,20);//把arr1中20个字节的内容拷贝到arr2中return 0;
}

虽然在刚刚的代码中实现了重叠部分的内存拷贝,但是在C语言的标准规定中,memcpy是实现不重叠的内存拷贝,memove是实现重叠部分的内存拷贝,要在适当的场景下使用不同的库函数。

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

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

相关文章

大家常用的 IDEA 插件大推荐,个个都得安装!

代码生成 插件名称作用Easy Code代码生成&#xff0c;支持定制模板Codota智能提示.ignore生成各种ignore文件&#xff0c;一键创建git ignore文件的模板&#xff0c;免得自己去写lombok简化代码工具restfultoolkit精确搜索urlMaven Helper解决maven以来冲突GenerateAllSetter一…

全新一代人工智能计算引擎MaxCompute杭州开服,强化阿里云大数据能力,比肩谷歌微软...

摘要&#xff1a; 3月22日&#xff0c;阿里云将正式开服售卖华东1&#xff08;杭州&#xff09;节点的大数据计算服务MaxCompute&#xff0c;以进一步提升对华东区域客户服务的响应速度&#xff0c;推动杭州大数据、人工智能产业的加速发展。 日前&#xff0c;全球权威调研机构…

【实操手册】一篇文章教你快速开始使用视频点播

摘要&#xff1a; 阿里云视频点播&#xff08;VoD&#xff09;是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速、视频播放于一体的一站式音视频点播解决方案。 用户可以通过阿里云管理控制台进行基本和高级 VoD 配置、操作&#xff0c;还可以通过视频点播…

微服务架构到底是什么鬼?

戳蓝字“CSDN云计算”关注我们哦&#xff01;摘自《微服务架构设计模式》作者&#xff1a;&#xff1a;[美] &#xff08;Chris Richardson&#xff09;译者&#xff1a;喻勇 导语&#xff1a;微服务架构如何与更广泛的软件架构概念相结合&#xff1f;什么是服务&#xff1f;服…

厉害了,蚂蚁金服!创造了中国自己的数据库OceanBase

摘要&#xff1a; 两万字长文带你了解关于OceanBase的一切&#xff01;2008年&#xff0c;王坚从微软亚洲研究院常务副院长的位置上离职后&#xff0c;于当年9月加入了阿里巴巴集团担任首席架构师一职&#xff0c;负责集团技术架构以及基础技术平台建设。加入阿里没多久后&…

模型预测控制 索引超出数组元素的数目(0)。_C++基础总结(二):C++基本数据类型及流控制语句详解...

上次分享了hello world&#xff0c; 今天小编分享 C基本数据类型及流控制语句 &#xff0c;建议大家收藏慢慢学习&#xff0c;同时希望对大家的C学习有所帮助。C 数组C 支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据…

ajax将数据显示在class为content的标签中_利用selenium实现自动翻页爬取某鱼数据

基本思路:首先用开发者工具找到需要提取数据的标签列表:利用xpath定位需要提取数据的列表然后再逐个提取相应的数据:保存数据到csv:利用开发者工具找到下一页按钮所在标签:利用xpath提取此标签对象并返回&#xff1a;调用点击事件,并循环上述过程:最终效果图:代码:from seleniu…

实体嵌入(向量化):用深度学习处理结构化数据

摘要&#xff1a; 本文详细阐述了深度学习如何来实现处理结构化数据的方法。嵌入源自于NLP&#xff08;word2vec&#xff09;中的单词学习&#xff0c;上图来自Aylien本博文将涉及机器学习中两个重复出现的问题&#xff1a;第一个问题是深度学习在图像和文本中都有较好的表现&a…

arcengine遍历属性表_Excel催化剂-遍历文件夹内文件信息特别是图像、音视频等特有信息...

在过往的功能中&#xff0c;有体现出在Excel上管理文件的极大优势&#xff0c;在文件的信息元数据中&#xff0c;有图片和音视频这两类特有的属性数据&#xff0c;此篇对过往功能的一个补充&#xff0c;特别增加了图片和音视频信息的遍历功能。使用场景在文件管理过程中&#x…

想要成为数据科学家?知道这11种机器学习算法吗?

摘要&#xff1a; 想要成为数据科学家&#xff1f;知道这十几种机器学习算法吗&#xff1f;赶快来了解一下吧&#xff0c;文中附各种算法的资源地址&#xff01; 机器学习从业者都有不同的个性&#xff0c;虽然其中一些人会说“我是X方面的专家&#xff0c;X可以训练任何类型的…

Docker精华问答 | Consul是什么?

在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项&#xff0c;那么今天我们继续关于Docker 的精华问答。1Q&#xff1a;Consul是什么&#xff1f;A&#xff1a;Consul是一个分布式…

2020科目一考试口诀_二级建造师考试科目有哪些2020

2020二级建造师考试科目有哪些&#xff1a;2020年二级建造师考试设《建设工程施工管理》、《建设工程法规及相关知识》两个公共科目和《专业工程管理与实务》科目(包含六个专业类别&#xff0c;任选一科报考)。(一)《专业工程管理与实务》科目分为6个专业类别&#xff1a;建筑工…

机器学习用于金融市场预测难在哪?

摘要&#xff1a; 本文主要讲述了机器学习用于金融市场预测难在哪&#xff1f;——金融间序是典型的部分可见马尔科夫决策过程&#xff08;POMDP&#xff09; 数据分布 小样本 难以计算的数据 十分复杂 部分可见马尔科夫决策过程 推荐系统的相似性 结束思索金融市场已经成为最早…

full join 和full outer join_多表关联:公式展开、join、过滤条件的顺序

这是在实现多表关联时想到的。我们现在这套体系&#xff0c;实现多表关联比较复杂。如果Superset能官方支持多表关联&#xff0c;不知道会是什么样的方案&#xff0c;复杂度如何。在公式这个层面&#xff0c;没有关联条件&#xff0c;只有两个列、或者多个列&#xff0c;相互之…

异构计算助力客户春节webp图片编码

摘要&#xff1a; 背景与挑战 技博客 GigaOM 曾报道&#xff1a;YouTube 的视频略缩图采用 WebP 格式后&#xff0c;网页加载速度提升了 10%&#xff1b;谷歌的 Chrome 网上应用商店采用 WebP 格式图片后&#xff0c;每天可以节省几 TB 的带宽&#xff0c;页面平均加载时间大约…

发动机压缩比怎么计算公式_怎么判断发动机有积碳,发动机积碳多的症状有哪些...

经过时间的积累&#xff0c;积碳作为发动机的通病几乎无处不有&#xff0c;很多车主也对此十分头疼。不过&#xff0c;很多车主小白并不了解车辆积碳是如何产生的&#xff0c;更不知道如何判断发动机是否有积碳&#xff0c;其实发动机积碳多的症状很容易让车主误以为车辆出现其…

Kubernetes之路 1 - Java应用资源限制的迷思

摘要&#xff1a; 随着容器技术的成熟&#xff0c;越来越多的企业客户在企业中选择Docker和Kubernetes作为应用平台的基础。然而在实践过程中&#xff0c;还会遇到很多具体问题。本文分析并解决了Java应用在容器使用过程中关于Heap大小设置的一个常见问题。随着容器技术的成熟&…

你家的饮水机,到底可以有多脏?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 胡巍巍出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;几年前&#xff0c;笔者在一所培训学校工作。因为学生多、学校大&#xff0c;老师也多&#xff0c;自然办公室也多。这种情况下&#xff0c;学校为了省事&a…

java http get_我是如何进入阿里巴巴的-面向春招应届生Java面试指南(九)

基础篇基本功面向对象的特征1.final, finally, finalize 的区别 final—修饰符&#xff08;关键字&#xff09;如果一个类被声明为final&#xff0c;意味着它不能再派生出新的子类&#xff0c;不能作为父类被继承。因此一个类不能既被声明为 abstract的&#xff0c;又被声明为f…

链表的快慢指针思想的解决

看接下来的一道题目 1、给定一个头结点为 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 例子&#xff1a;[1,2,3,4,5] 返回中间节点3 [1,2,3,4,5,6] 返回中间节点4 我们该如何做呢&#xff0c;首先这里用到了快慢…