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

memmove函数的使用与模拟实现

313fafcb3ac24739a603b05482c3a12a.png

目录

1.头文件

2.memmove函数讲解

3.memmove函数模拟实现


方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!


1.头文件

memcpy函数的使用需要包括头文件

#include<string.h>

2.memmove函数讲解

78f13f992d8348049aab26a7ff643aa7.png

memmove的用法与上一节讲的memcpy函数相同

二者之间只有一点不同那就是memmove可以实现d地址重叠的复制

示例如下:

989d07c42ec44404b4dfb622c8c83e95.png

这就是地址重叠的复制,我们说过memcpy在VS2022中也可以实现这种操作,但其实memcpy用这种地址重叠的定义是不对的,应该使用memmove函数


3.memmove函数模拟实现

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
void my_memmove(void* arr1,void* arr2,size_t num) {//1个字节1个字节的复制//后>前(指arr2>arr1)if (arr2 > arr1) {while (num--) {*(char*)arr1 = *(char*)arr2;arr1 = (char*)arr1 + 1;arr2 = (char*)arr2 + 1;}}//前>后(指arr1>arr2)while (num--) {*((char*)arr1 + num) = *((char*)arr2 + num);//从后往前复制,避免数组内容改变,复制内容不对}}
int main()
{	char arr2[] = { "12345"};char arr1[] = { "abcxxxdefg" };int sz = strlen(arr1);my_memmove(arr1+3 , arr1, 5);for (int i = 0; i < sz; i++) {printf("%c ", arr1[i]);}
}

 使用了从后往前复制的思路,避免地址重叠因变量的改变而导致复制内容不对


8fdd48caf53e46a897fd8a5554dbb454.png

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于人工智能的智能语音助手
  • DMDPC单副本集群安装
  • HarmonyOS开发实战( Beta5.0)滑动视频自动播放案例实践
  • Caffenie配合Redis做两级缓存,Redis发布订阅实现缓存一致更新
  • 利士策分享,在延长退休背景下,应该如何合理的规划退休生活?
  • openstack之glance介绍
  • 数据库-基本操作(一)
  • c/c++面试100道
  • 单个 java 虚拟机 生产者消费者
  • 《OpenCV计算机视觉》—— 对图片进行旋转的两种方法
  • 3D云渲染农场为何怎么贵?主要消耗成本介绍
  • 什么是野指针和悬空指针?
  • NVIDIA驱动学习
  • 【即时通讯】轮询方式实现
  • Android 内置应用裁剪
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【Amaple教程】5. 插件
  • 【个人向】《HTTP图解》阅后小结
  • Angular 响应式表单之下拉框
  • CentOS7 安装JDK
  • css的样式优先级
  • emacs初体验
  • input实现文字超出省略号功能
  • JAVA_NIO系列——Channel和Buffer详解
  • Laravel 中的一个后期静态绑定
  • Python - 闭包Closure
  • Spring-boot 启动时碰到的错误
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue实战(四)登录/注册页的实现
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 计算机在识别图像时“看到”了什么?
  • 聚类分析——Kmeans
  • 类orAPI - 收藏集 - 掘金
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端设计模式
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • HanLP分词命名实体提取详解
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • Linux权限管理(week1_day5)--技术流ken
  • ​学习一下,什么是预包装食品?​
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (10)ATF MMU转换表
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • **python多态
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • 、写入Shellcode到注册表上线
  • .a文件和.so文件
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复