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

C语言学习之内存函数

        今天我们来学习一下C语言中内存函数

        以下内存函数的使用均需要包含头文件<string.h>

目录

memcpy函数的使用及其模拟实现

        memcpy函数的模拟实现

memmove函数的使用和模拟实现

        memmove函数的模拟实现

memset函数的使用

memcmp函数的使用


memcpy函数的使用及其模拟实现

        语法结构如下:

void* memcpy(void* destination, const void* source, size_t num);

        memcpy函数从source位置开始向后复制num个字节的数据到destination指向的内存位置

        这个函数在遇到’\0‘的时候不会停下来

        如果source和 destination重叠复制的结果都未知

#include<stdio.h>
#include<string.h>
int main()
{int ar1[] = { 1,2,3,4,5,6,7,8,9,10 };int ar2[10] = {0};memcpy(ar2, ar1,sizeof(ar1));for (int i = 0;i < 10;i++){printf("%d ", ar2[i]);}return 0;
}

        memcpy函数的模拟实现

#include<stdio.h>
#include<string.h>
//函数返回目标空间的起始地址
void my_memcpy(void* dest, const void* src, size_t num)
{//void*指针需要转换,不能直接运算while (num--){*(char*)dest = *(char*)src;src = (char*)src + 1;dest = (char*)dest + 1;}}
int main()
{int ar1[10] = { 1,2,3,4,5,6,7,8,9,10 };int ar2[10] = {0};my_memcpy(ar2, ar1,sizeof(ar1));for (int i = 0;i < 10;i++){printf("%d ", ar2[i]);}return 0;
}

而对于重叠的内存空间,可以交给memmove函数处理

memmove函数的使用和模拟实现

        语法结构:

void* memmove(void* destination, const void* source, size_t num);

        与memmove函数差别是memmove函数处理的源内存块和目标内存块是可以重叠的 

        如果源内存和目标空间出现重叠,就交给memmove函数处理

int main()
{int ar1[] = { 1,2,3,4,5,6,7,8,9,10 };memmove(ar1+2, ar1,20);for (int i = 0;i < 10;i++){printf("%d ", ar1[i]);}return 0;
}

        结果为:

        memmove函数的模拟实现

        思路:以拷贝5个字节到第三个为起始位置为例:

        

        当将蓝色数据拷贝到红色数据的时候,从后向前;将红色数据拷贝到蓝色数据的时候,从前向后

        因此有如下代码: 

void* my_memmove(void* dest, const void* src, size_t num)
{void* ret = dest;if (dest<src || (char*)dest>(char*)src + num){/*源头在目标前面,或目标在源头后面,则从头开始复制*/while (num--){*(char*)dest = *(char*)src;src = (char*)src + 1;dest = (char*)dest + 1;}}else{/*源头在目标后面,则从尾开始复制*/dest = (char*)dest + num - 1;src = (char*)src + num - 1;while (num--){*(char*)dest = *(char*)src;src = (char*)src - 1;dest = (char*)dest - 1;}}return (ret);
}
int main()
{int ar1[] = { 1,2,3,4,5,6,7,8,9,10 };my_memmove(ar1, ar1+2,20);for (int i = 0;i < 10;i++){printf("%d ", ar1[i]);}return 0;
}

memset函数的使用

        语法结构:

void* memset(void* ptr, int value, size_t num);

        memset函数是用来设置内存的,将内存中的值以字节为单位设置成想要的内容

#include<stdio.h>
#include<string.h>
int main()
{char str1[] = "hello world";memset(str1, 'a', 6);printf("%s\n", str1);return 0;
}

       结果为:

         

memcmp函数的使用

        语法结构为:

int memcmp(const void *ptr1,const void *ptr2,size_t nums);

        比较ptr1和ptr2指针指向的位置,向后num个字节(即比较前num个字节的大小)

        返回值如下:

         即:

        <0,ptr1小于ptr2

        =0,ptr1等于ptr2

        >0,ptr1大于ptr2

#include<stdio.h>
#include<string.h>
int main()
{char str1[] = "DWAGYftsuibhug";char str2[] = "DWAGYhulu";int n=memcmp(str1, str2, sizeof(char)*10);if (n == 0){printf("str1 is equal to str2\n");}else if (n < 0){printf("str1 is less than str2\n");}else{printf("str1 is greater than str2\n");}my_memcpy(str1, str2, sizeof(char)*5);return 0;
}

        本篇博客就到这里了。求一个点赞,谢谢各位

相关文章:

C语言学习之内存函数

今天我们来学习一下C语言中内存函数 以下内存函数的使用均需要包含头文件<string.h> 目录 memcpy函数的使用及其模拟实现 memcpy函数的模拟实现 memmove函数的使用和模拟实现 memmove函数的模拟实现 memset函数的使用 memcmp函数的使用 memcpy函数的使用及其模拟实现…...

Python 数据库编程

一、数据库连接基础 1. 标准流程 import database_module # 如mysql.connector, sqlite3等 # 1. 建立连接 connection database_module.connect( host"localhost", user"username", password"password", database"dbnam…...

软考软件评测师——软件工程之开发模型与方法

目录 一、核心概念 二、主流模型详解 &#xff08;一&#xff09;经典瀑布模型 &#xff08;二&#xff09;螺旋演进模型 &#xff08;三&#xff09;增量交付模型 &#xff08;四&#xff09;原型验证模型 &#xff08;五&#xff09;敏捷开发实践 三、模型选择指南 四…...

机器学习入门

机器学习入门 1 . 机器学习是什么&#xff1f; 机器学习&#xff08;Machine Learning, ML&#xff09;是一种用数据经验替代显式规则编程来完成任务的方法──模型从样本 (X, y) 中学习 映射函数 f: X → Y&#xff0c;并在新样本上做出预测。和传统“if … else”程序相比&…...

git学习与使用(远程仓库、分支、工作流)

文章目录 前言简介git的工作流程git的安装配置git环境&#xff1a;git config --globalgit的基本使用新建目录初始化仓库&#xff08;repository&#xff09;添加到暂存区新增/修改/删除 文件状态会改变 提交到仓库查看提交&#xff08;commit&#xff09;的历史记录git其他命令…...

制造业或跨境电商相关行业三种模式:OEM、ODM、OBM

一、基础概念对比 模式定义核心能力利润来源控制权OEM代工生产&#xff08;贴牌生产&#xff09;纯生产制造能力加工费&#xff08;薄利&#xff09;品牌方掌控一切ODM设计生产&#xff08;自主设计代工&#xff09;设计研发能力设计溢价生产利润制造商掌握设计OBM自主品牌&am…...

APPtrace 智能参数系统:重构 App 用户增长与运营逻辑

一、免填时代&#xff1a;APPtrace 颠覆传统参数传递模式 传统 App 依赖「邀请码 / 手动绑定」实现用户关联&#xff0c;流程繁琐导致 20%-30% 的用户流失。APPtrace 通过 **「链接参数自动传递 安装后智能识别」** 技术&#xff0c;让用户在无感知状态下完成关系绑定、场景还…...

在 Excel 中使用 C# .NET 用户定义函数 操作步骤

点开选项 点击加载项 点击跳转 点击浏览 选择仙盟excel...

PyTest

一、基本用法: 1.测试框架做了什么: (1).测试发现 a.创建test_开头的文件 b.创建Test开头的类 c.创建test_开头的函数或方法 pytest中以每一个函数或方法作为一个用例 pytest主要以名字区分普通函数(方法)、用例 pytest的启动方式:在给定的项目中执行pytest命令即可 p…...

Python Day27 学习

今天学习讲义Day17的内容&#xff1a;无监督算法中的聚类浙大疏锦行 Q1. 什么是聚类&#xff1f; 本质上就是一种分组分类 关于聚类的准备工作&#xff1a; 代码实现 # 先运行之前预处理好的代码 import pandas as pd import pandas as pd #用于数据处理和分析&#xff…...

在 Win 10 上,Tcl/Tk 脚本2个示例

set PATH 新增 D:\Git\mingw64\bin where tclsh D:\Git\mingw64\bin\tclsh.exe where wish D:\Git\mingw64\bin\wish.exe 编写 test_tk.tcl 如下 #!/usr/bin/tclsh # test 文件对话框 package require Tk# 弹出文件选择对话框&#xff0c;限制选择.txt文件 set filePath […...

渐开线少齿差传动学习笔记

之前看到了一个渐开线一齿差的视频&#xff0c;觉得比较有意思&#xff0c;想自己动手做一个看看&#xff0c;下面是最开始尝试的一个失败的结果&#xff0c;不知道小伙伴们发现问题了没&#xff1f; 本来就是想凑一凑看看&#xff0c;但是发现不是凑起来不是件容易的事。那么…...

基于CATIA参数化圆锥建模的自动化插件开发实践——NX建模之圆锥体命令的参考与移植(二)

引言 在CATIA二次开发领域,参数化建模技术可提升复杂几何体的创建效率达60%。本文基于PySide6 GUI框架与pycatia接口库,深度解析锥体自动化建模工具的开发实践。该工具创新性地融合了NX的交互逻辑与CATIA的混合建模技术,实现双模式输入(高度/锥角)的智能参数转换,较传统…...

Java集合框架详解:单列集合与双列集合

目录 1. 引言&#xff1a;为什么需要集合框架 2. 基础概念&#xff1a;集合框架概述 2.1 集合框架的结构 ​编辑 ​编辑 2.2 集合与数组的比较 3. 前置知识&#xff1a;理解集合框架背后的基础数据结构 3.1 数组 3.2 链表 3.3 哈希表 3.4 二叉树与二叉查找树 3.5 红…...

leetcode 33. Search in Rotated Sorted Array

题目描述 可以发现的是&#xff0c;将数组从中间分开成左右两部分的时候&#xff0c;一定至少有一部分的数组是有序的。左部分[left,mid-1]&#xff0c;右部分[mid1,right]。 第一种情况&#xff1a;左右两部分都是有序的&#xff0c;说明nums[mid]就是整个数组的最大值。此时…...

OpenCV 图像色彩空间转换

一、知识点: 1、色彩空间转换函数 (1)、void cvtColor( InputArray src, OutputArray dst, int code, int dstCn 0, AlgorithmHint hint cv::ALGO_HINT_DEFAULT ); (2)、将图像从一种颜色空间转换为另一种。 (3)、参数说明: src: 输入图像&#xff0c;即要进行颜…...

python-leetcode 69.最小栈

题目&#xff1a; 设计一个支持push,pop,top,操作&#xff0c;并能在常数时间内检索到最小元素的栈。 辅助栈法&#xff1a; 1&#xff1a;使用两个栈&#xff0c;一个主栈用于存储所有元素&#xff0c;另一个辅助栈用于存储当前元素的最小值 2: 每次push时&#xff0c;将元…...

C#基础:yield return关键字的特点

一、特点 1.最终返回的结果是IEnumerable<T> 2.使用yield return时&#xff0c;返回的是单个元素&#xff08;即T&#xff09; 3.好处&#xff1a;延迟加载&#xff0c;需要时才计算 二、验证 通过打断点可知&#xff0c;只有当listB遍历的时候&#xff0c;才会进入Get…...

机器学习 集成学习方法之随机森林

集成学习方法之随机森林 1 集成学习2 随机森林的算法原理2.1 Sklearn API2.2 示例 1 集成学习 机器学习中有一种大类叫集成学习&#xff08;Ensemble Learning&#xff09;&#xff0c;集成学习的基本思想就是将多个分类器组合&#xff0c;从而实现一个预测效果更好的集成分类…...

【Vue篇】组件的武林绝学:状态风暴下的乾坤挪移术

引言 &#x1f50d; Vue组件迷雾重重&#xff1f; ✧ Scoped如何实现样式隔离&#xff1f; ✧ Data为何必须是函数&#xff1f; ✧ 父子组件如何跨域通信&#xff1f; ✧ Props单向数据流如何破局&#xff1f; &#x1f680; 本文直击组件化七大核心&#xff1a; ▸ 样式隔离原…...

使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体(手把手教学版)

文章目录 一、为什么要用代理IP&#xff1f;(重要&#xff01;&#xff01;&#xff01;)二、环境准备&#xff08;三件套走起&#xff09;2.1 安装必备库&#xff08;pip大法好&#xff09;2.2 获取亮数据代理&#xff08;官网注册送试用&#xff09; 三、编写爬虫代码&#x…...

【MySQL】第七弹——复习总结 视图

文章目录 &#x1f30f;客户端和数据库操作&#x1f30f;表操作&#x1f30f;CRUD 增删改查总结&#x1f30f;数据库约束&#x1f30f;表的设计&#x1f30f;分组查询&#x1f30f;聚合函数&#x1f30f;联合查询&#x1f30f;SQL语句中各部分的执行顺序&#x1fa90;视图 &…...

基于Springboot + vue3实现的工商局商家管理系统

项目描述 本系统包含管理员、商家两个角色。 管理员角色&#xff1a; 用户管理&#xff1a;管理系统中所有用户的信息&#xff0c;包括添加、删除和修改用户。 许可证申请管理&#xff1a;管理商家的许可证申请&#xff0c;包括搜索、修改或删除许可证申请。 许可证审批管理…...

前端开发——前端样式BUG调试全指南2025终极版

前端开发——前端样式BUG调试全指南2025终极版 前端样式BUG调试指南&#xff08;2025终极版&#xff09;一、调试方法论与工具链1. 问题定位三板斧(1) 现象复现与特征提取(2) 现代调试工具组合拳(3) 三维问题定位法 2. 深度排查六步法步骤1&#xff1a;样式覆盖检测步骤2&#…...

【DeepSeek】为什么需要linux-header

编译Linux驱动程序时&#xff0c;通常需要 Linux内核头文件&#xff08;linux-headers&#xff09;&#xff0c;而不是完整的源代码&#xff08;linux-source&#xff09;。以下是详细解释&#xff1a; 1. 为什么需要内核头文件&#xff1f; 头文件的作用&#xff1a; 内核头文…...

c语言刷题之实际问题

小乐乐定闹钟 代码如下&#xff1a; 小乐乐排电梯 代码如下&#xff1a; 小乐乐与欧几里得 代码如下&#xff1a; 小乐乐改数字 代码如下&#xff1a; 小乐乐走台阶 代码如下&#xff1a; 台阶为1,2时走法分别1&#xff0c;2种 1:(1) 2:(1,1),(2) 要走完n阶时&#xff0c;即我…...

【图像大模型】Kolors:基于自监督学习的通用视觉色彩增强系统深度解析

Kolors&#xff1a;基于自监督学习的通用视觉色彩增强系统深度解析 一、项目架构与技术原理1.1 系统定位与核心能力1.2 核心算法突破1.2.1 色彩感知表征学习1.2.2 动态色彩变换矩阵 二、系统实现与训练策略2.1 训练框架设计2.1.1 自监督预训练 2.2 损失函数设计 三、实战部署指…...

生产消费者模型 读写者模型

概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯&#xff0c;而通过阻塞队列来进行通讯&#xff0c;所以生产者生产完数据之后不用等待消费者处理&#xff0c;直接扔给阻塞队列&#xff0c;消费者不找生产者要数据…...

每日Prompt:双重曝光

提示词 双重曝光&#xff0c;Midjourney 风格&#xff0c;融合、混合、叠加的双重曝光图像&#xff0c;双重曝光风格。一幅由 Yukisakura 创作的杰出杰作&#xff0c;展现了一个奇妙的双重曝光构图&#xff0c;将阿拉贡阿拉松之子的剪影与生机勃勃春季里中土世界视觉上引人注目…...

基于springboot3 VUE3 火车订票系统前后端分离项目适合新手学习的项目包含 智能客服 换乘算法

​ 博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆…...

DAY29 超大力王爱学Python

知识点回顾 类的装饰器装饰器思想的进一步理解&#xff1a;外部修改、动态类方法的定义&#xff1a;内部定义和外部定义 作业&#xff1a;复习类和函数的知识点&#xff0c;写下自己过去29天的学习心得&#xff0c;如对函数和类的理解&#xff0c;对python这门工具的理解等&…...

jvm对象压缩

最近在看一些文章&#xff0c;知道64位jvm在启动时指定-XX:UseCompressedOops后就会开启压缩&#xff0c;但是怎么压缩的&#xff0c;以及什么情况下压缩失效&#xff0c;没有一篇文章讲的特别透彻&#xff0c;在这里记录一下&#xff0c;后面抽时间进行更新。 参考文档 https…...

TripGenie:畅游济南旅行规划助手:个人工作纪实(十八)

本周&#xff0c;我增加了网页搜索并在右侧显示搜索链接与标题的功能&#xff0c;通过这个功能&#xff0c;可以帮助用户搜索网络上关于济南旅游的信息&#xff0c;提高用户检索信息的速度&#xff0c;用户可以通过点击网页链接了解更多关于济南的信息。 首先&#xff0c;我设计…...

Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图,适用于真空室应用

Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图&#xff0c;适用于真空室应用...

Rofin PowerLine E Air维护和集成手侧激光Maintenance and Integration Manual

Rofin PowerLine E Air维护和集成手侧激光Maintenance and Integration Manual...

C++中String类

1.String学习前的了解 1.1范围for和auto关键字 范围 for 循环 范围 for 循环是 C11 引入的一种语法糖&#xff0c;用于简化遍历容器或序列的代码。其基本语法如下&#xff1a; 迭代器版本&#xff1a; 范围for主要用来遍历一个容器(数据结构).范围for的&#xff08;&#xf…...

LSTM语言模型验证代码

#任务&#xff1a;基于已有文本数据&#xff0c;建立LSTM模型&#xff0c;预测序列文字 1 完成数据预处理&#xff0c;将文字序列数据转化为可用于LSTM输入的数据。 2 查看文字数据预处理后的数据结构&#xff0c;并进行数据分离操作 3 针对字符串输入&#xff08;“In the hea…...

Nextjs App Router 开发指南

Next.js是一个用于构建全栈web应用的React框架。App Router 是 nextjs 的基于文件系统的路由器&#xff0c;它使用了React的最新特性&#xff0c;比如 Server Components, Suspense, 和 Server Functions。 术语 树(Tree): 一种用于可视化的层次结构。例如&#xff0c;包含父…...

测试W5500的第3步_使用ioLibrary库创建TCPServer

W5500是一款具有8个Socket的网络芯片&#xff0c;支持TCP Server模式&#xff0c;最多可同时连接8个客户端。本文介绍了基于STM32F10x和W5500的TCP Server实现&#xff0c;包括SPI初始化、W5500复位、网络参数配置、Socket状态管理等功能&#xff0c;适用于需要多客户端连接的嵌…...

Python训练营打卡——DAY31(2025.5.20)

目录 一、机器学习项目的流程 二、文件的组织 1. 项目核心代码组织 2. 配置文件管理 3. 实验与探索代码 4. 项目产出物管理 三、注意事项 if name "main" 编码格式 类型注解 四、通俗解释 1. 拆分文件和目录&#xff1a;整理房间一样管理代码​​ 2. 导…...

P1152 欢乐的跳

P1152 欢乐的跳 - 洛谷 使用map映射来解 #include<bits/stdc.h> using namespace std; int n,a[1005],c[1005]; map<int,int>b;//因为要记录1~n-1是否都出现了 int main(){cin>>n;cin>>a[1];for(int i2;i<n;i){cin>>a[i];//c[i-1]a[i]-a[…...

基于 STM32 的蔬菜智能育苗系统硬件与软件设计

一、系统总体架构 蔬菜智能育苗系统通过单片机实时采集温湿度、光照等环境数据,根据预设阈值自动控制灌溉、补光、通风等设备,实现育苗环境的智能化管理。系统主要包括以下部分: 主控芯片:STM32F103C8T6(32 位 ARM Cortex-M3 单片机,性价比高,适合嵌入式控制)传感器模…...

数论:数学王国的密码学

在计算机科学的世界里&#xff0c;数论就像是一把神奇的钥匙&#xff0c;能够解开密码学、算法优化、随机数生成等诸多领域的谜题。作为 C 算法小白&#xff0c;今天我就带大家一起走进数论的奇妙世界&#xff0c;探索其中的奥秘。 什么是数论&#xff1f; 数论是纯粹数学的分…...

软考软件评测师——黑盒测试测试方法

以下为优化后的博客内容&#xff1a; 软件测试方法论精要 第一部分 核心知识点解析 一、等价类划分法 基本概念 将测试对象的输入域划分为若干子集&#xff0c;每个子集选取代表性样本作为测试用例。分为有效等价类&#xff08;合法输入&#xff09;和无效等价类&#xff0…...

python训练 60天挑战-day31

知识点回顾 规范的文件命名规范的文件夹管理机器学习项目的拆分编码格式和类型注解 昨天我们已经介绍了如何在不同的文件中&#xff0c;导入其他目录的文件&#xff0c;核心在于了解导入方式和python解释器检索目录的方式。 搞清楚了这些&#xff0c;那我们就可以来看看&#x…...

2025年电工杯新规发布-近三年题目以及命题趋势

电工杯将于2025.5.23 周五早八正式开赛&#xff0c;该竞赛作为上半年度竞赛规模最大的竞赛&#xff0c;因免报名费、一级学会承办等因素&#xff0c;被众多高校认可。本文将在从2025年竞赛新规、历史赛题选题分析、近年优秀论文分享、竞赛模板分析等进行电工杯备赛&#xff0c;…...

四元数中 w xyz 的含义及应用

四元数是一种用于表示三维空间中旋转的数学工具&#xff0c;形式通常为 qwxiyjzk&#xff0c;其中w 是实部&#xff0c;x,y,z 是虚部。它们的含义如下&#xff1a; 1. w&#xff08;实部&#xff09; 2. x,y,z&#xff08;虚部/向量部分&#xff09; 3. 单位四元数的条件 四元…...

CSS 样式表的四种应用方式详解以及css注释的应用

一、外部 CSS&#xff08;推荐方式&#xff09; 定义&#xff1a;将 CSS 代码保存为独立的 .css 文件&#xff0c;通过 <link> 标签引入 HTML。 优点&#xff1a; 实现内容与样式完全分离多个页面可共享同一 CSS 文件浏览器可缓存 CSS 文件&#xff0c;提升加载速度 …...

IntentUri页面跳转

android browser支持支持Intent Scheme URL语法的可以在wrap页面加载或点击时&#xff0c;通过特定的intent uri链接可以打开对应app页面&#xff0c;例如 <a href"intent://whatsapp/#Intent;schememyapp;packagecom.xiaoyu.myapp;S.help_urlhttp://Fzxing.org;end&qu…...

蓝桥杯2114 李白打酒加强版

问题描述 话说大诗人李白, 一生好饮。幸好他从不开车。 一天, 他提着酒显, 从家里出来, 酒显中有酒 2 斗。他边走边唱: 无事街上走&#xff0c;提显去打酒。 逢店加一倍, 遇花喝一斗。 这一路上, 他一共遇到店 N 次, 遇到花 M 次。已知最后一次遇到的是花, 他正好把酒喝光了。…...