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

C语言 —— memeove函数的模拟实现

函数作用:从sourse的位置开始向后复制num个字节到desttintion指向的内存位置,(运用于字符时,遇到\0不会停止),这个函数支持重叠部分的复制,是memcpy函数的改进版本

具体步骤:

1:函数定义:

需要两个指针,分别指向起始位置和目标空间位置,还有复制的字节数(字节数,不是元素个数

返回值是目标位置的起始位置

2:因为可以复制重叠部分,所以需要进行判断

这里我用同一个数组进行举例

12345678910
12345678910

1)如果dest<str,按照普通的步骤进行就可以完成任务

2)如果dest>str,按照顺序就会发生错误

如果从后往前进行拷贝,可以避免这种结果

3:最后进行代码优化

str指向的空间是不用进行修改的,所以指针用const修饰,防止传进去空指针,用assert函数

#define _CRT_SECURE_NO_WARNINGS 1#include <assert.h>
#include <stdio.h>
#include <string.h>void* my_memmove(void* dest, const void* str, size_t num)
{void* ret = dest;assert(dest && str);if (dest <= str){while (num--){*(char*)dest = *(char*)str;dest = ((char*)dest)++;str = ((char*)str)++;}}else{while (num--){*((char*)dest + num) = *((char*)str + num);}}return dest;
}int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10};my_memmove(arr+3, arr , 20 );for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
http://www.lryc.cn/news/319724.html

相关文章:

  • <el-tab>样式自定义——一个可以触类旁通的小例子
  • XDP学习笔记
  • JavaScript进阶:js的一些学习笔记-4
  • 【可能是全网最丝滑的LangChain教程】三、快速入门LLMChain
  • Oracle Primavera Analytics 是什么,与P6的关系?
  • 在 Amazon Bedrock 上使用 Anthropic Claude 系统 Prompt
  • 【LeetCode】动态规划--题目练习
  • 【LeetCode热题100】101. 对称二叉树(二叉树)
  • VLC抓取m3u8视频
  • 聊聊Python都能做些什么
  • JavaWeb06-MVC和三层架构
  • MySQL数据库实现增删改查基础操作
  • PCM和I2S区别
  • 大模型笔记:吴恩达 ChatGPT Prompt Engineering for Developers(1) prompt的基本原则和策略
  • 设计模式 — — 单例模式
  • C++:菱形继承与虚继承
  • 贡献法:USACO 2021 December Contest Bronze:孤独的照片
  • Java实现简单的通讯录
  • 服务器数据恢复—raid5热备盘上线同步数据失败的如何恢复数据
  • 探索C语言中的循环结构
  • 数学建模-估计出租车的总数
  • 设计模式在芯片验证中的应用——装饰器
  • Python 查找并高亮PDF中的指定文本
  • LEETCODE LCS 03. 主题空间
  • 【Spring Boot 源码学习】深入应用上下文初始化器实现
  • 【Docker】一文趣谈Docker
  • 代码随想录day19(2)二叉树:二叉树的最大深度(leetcode104)
  • Lua中文语言编程源码-第五节,更改lcorolib.c协程库函数, 使Lua加载中文库关键词(与所有的基础库相关)
  • Docker学习之数据管理(超详解析)
  • FDTD液晶折射率各项异性表示方法