C语言----内存函数
内存函数主要用于动态分配和管理内存,它直接从指针的方位上进行操作,可以实现字节单位的操作。
其包含的头文件都是:string.h
memcpy
copy block of memory的缩写----拷贝内存块
格式:
void *memcpy(void *dest, const void *src, size_t num);
作用:与strcpy类似,但是从内存的角度从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
要求:
• 这个函数在遇到 '\0' 的时候并不会停下来。也就是说如果在数据中间插入 ‘\0’ 是不会停下复制进程的。
• 如果source和destination有任何的重叠,复制的结果都是未定义的。
• 鉴于拷贝的类型不一,使用*void来表示任意类型。
• num的单位是字节
实例:
int main()
{char arr1[20] = "hello world";char arr2[20] ;memcpy(arr2, arr1,strlen(arr1)+1);//需要复制的字节数为arr1的长度加上字符串结束符'\0'printf("%s", arr2);return 0;
}
int main()
{int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };//将arr1中的4 5 6 7 8,拷贝到arr2中memcpy(arr2, arr1+3, 5 * sizeof(int));//可以拷贝数组中的任意数据int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}
模拟实现:
void* my_memcpy(void* dest, const void* src, size_t num)
{void* ret = dest;while (num--)//根据所要复制的字节数进行递减直到复制完成{assert(dest && src);*(char*)dest = *(char*)src;dest = (char*)dest+1;src = (char*)src + 1;}return (ret);
}
memmove
move block of memory的缩写----内存体转移
格式
void * memmove ( void * destination, const void * source, size_t num );
作用与要求
• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。由于该特性,实际上memmove比memcpy更加实用,兼容性也更强。
实例:
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };memmove(arr1 + 2, arr1, 20);//20个字节就是五个整型,在这里arr1+2也就是从3开始拷贝1,2,3,4,5五个数字int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr1[i]);}return 0;
}//打印出的结果是1,2,1,2,3,4,5,8,9,10(因为arr1的空间只够放下十个整型,并且mommove是允许重叠内存空间的)
模拟实现:
void* my_memmove(void* dest, const void* src, size_t n)
{unsigned char* d = (unsigned char*)dest;const unsigned char* s = (const unsigned char*)src;if (s < d && s + n > d) {// 如果源地址在目标地址之前且重叠for (size_t i = n; i > 0; i--) {d[i - 1] = s[i - 1];}} else {// 普通情况下的复制for (size_t i = 0; i < n; i++) {d[i] = s[i];}}return dest;
}
memset
set block of memory的缩写----填充设置内存块
格式
void * memset ( void * ptr, int value, size_t num );
作用:memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。同时在重叠内存空间时实现覆盖原内容。
要求:
• 使用memset函数时需要谨慎,确保不会意外覆盖原有的数据。
实例:
int main()
{char str[] = "almost every programmer should know memset!";memset(str, '-', 6);printf(str)return 0;
}//结果是 ------ every programmer should know memset!
//也就是说将almost覆盖
模拟实现:
void* my_memset(void* ptr, int value, size_t num)
{unsigned char* p = (unsigned char*)ptr;for (size_t i = 0; i < num; i++) {p[i] = (unsigned char)value;}return ptr;
}
memcmp
compare block of memory的缩写----比较内存块
作用:与strcmp类似,⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节,参照下表:

注意:同strcmp不同的是,memcmp可以比较内存区域的大小,具体参照下方实例。
实例:
int main()
{char ned1[] = "dsdsdssdds1";char ned2[] = "dsdsdssdds2";int n;n = memcmp(ned1, ned2, 44);printf("%d", n);return 0;
}
模拟实现:
int my_memcmp(const void* ptr1, const void* ptr2, size_t num)
{//比较内存区域大小const unsigned char* p1 = (const unsigned char*)ptr1;const unsigned char* p2 = (const unsigned char*)ptr2;for (size_t i = 0; i < num; i++) {if (p1[i] < p2[i]) return -1;if (p1[i] > p2[i]) return 1;}return 0;
}
相关文章:
C语言----内存函数
内存函数主要用于动态分配和管理内存,它直接从指针的方位上进行操作,可以实现字节单位的操作。 其包含的头文件都是:string.h memcpy copy block of memory的缩写----拷贝内存块 格式: void *memcpy(void *dest, const void …...
【力扣】快乐数,哈希集合 + 快慢指针 + 数学
快乐数原题地址 方法一:哈希集合 定义函数 getNext(n) ,返回 n 的所有位的平方和。一直执行 ngetNext(n) ,最终只有 2 种可能: n 停留在 1 。无限循环且不为 1 。 证明:情况 1 是存在的,如力扣的示例一…...
c实现顺序表
目录 c语言实现顺序表 完整代码实现 c语言实现顺序表 顺序表的结构定义: typedef struct vector {int size; // 顺序表的容量int count; // 顺序表现在存储了多少个数据int *data; // 指针指向连续的整型存储空间 } vector;顺序表的结构操作: 1、初始…...
微软为新闻编辑行业推出 AI 辅助项目,记者参加免费课程
2 月 6 日消息,微软当地时间 5 日发布新闻稿宣布与多家新闻机构展开多项基于生成式 AI 的合作。微软表示,其使命是确保新闻编辑室在今年和未来拥有创新。 目前建议企业通过微软官方合作伙伴获取服务,可以合规、稳定地提供企业用户使用ChatGP…...
openssl3.2 - exp - buffer to BIO
文章目录 openssl3.2 - exp - buffer to BIO概述笔记END openssl3.2 - exp - buffer to BIO 概述 openssl的资料看的差不多了, 准备将工程中用到的知识点整理一下. openssl中很多API是以操作文件作为输入的, 也有很多API是以BIO作为输入的. 不管文件是不是受保护的, 如果有可…...
Android 13.0 系统framework修改低电量关机值为3%
1、讲在最前面 系统rom定制开发中,其中在低电量时,系统会自动关机,这个和不同的平台和底层驱动和硬件都有关系,需要结合这些来实际调整这个值,我们可以通过分析源码中电池服务的代码,然后进行修改如何实现…...
【EAI 013】BC-Z: Zero-Shot Task Generalization with Robotic Imitation Learning
论文标题:BC-Z: Zero-Shot Task Generalization with Robotic Imitation Learning 论文作者:Eric Jang, Alex Irpan, Mohi Khansari, Daniel Kappler, Frederik Ebert, Corey Lynch, Sergey Levine, Chelsea Finn 论文原文:https://arxiv.org…...
一文讲透ast.literal_eval() eval() json.loads()
文章目录 一文讲透ast.literal_eval() eval() json.loads()1. ast.literal_eval()2. eval()3. json.loads()4. 总结 一文讲透ast.literal_eval() eval() json.loads() 在Python库中,我们经常会遇到需要将字符串转换为相应对象或数据结构的情况。在这种情况下&#…...
微软.NET6开发的C#特性——类、结构体和联合体
我是荔园微风,作为一名在IT界整整25年的老兵,看到不少初学者在学习编程语言的过程中如此的痛苦,我决定做点什么,下面我就重点讲讲微软.NET6开发人员需要知道的C#特性,然后比较其他各种语言进行认识。 C#经历了多年发展…...
naiveui 上传图片遇到的坑 Upload
我在开发图片上传功能, 需要手动触发上传 但是我调用它内部自定义submit方法, 结果接口一直在报错400 我反反复复的测试了好就, 确定了就是我前端的问题,因为之前一直在做后端的错误排查, 以为是编译问题(因为之前也出现过这个问题) 好 , 我把其中一个参数类型改为String类型, …...
安全之护网(HVV)、红蓝对抗
文章目录 红蓝对抗什么是护网行动?护网分类护网的时间 什么是红蓝对抗红蓝对抗演练的目的什么是企业红蓝对抗红蓝对抗价值参考 红蓝对抗 什么是护网行动? 护网的定义是以国家组织组织事业单位、国企单位、名企单位等开展攻防两方的网络安全演习。进攻方…...
Leetcode 213 打家劫舍 II
题意理解: 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果…...
【C语言】三子棋游戏实现代码
目录 1.三子棋代码功能介绍 2.三子棋游戏实现步骤 ①打印菜单栏 ②判断是否进入三子棋游戏 ③三子棋游戏基本函数实现 (1)清空(初始化)棋盘函数实现 (2)打印棋盘函数实现 (3࿰…...
docker常用10条容器操作命令
Docker 中一些常用的容器操作命令,我们可以根据需要使用这些命令来管理和操作 Docker 容器。我们这次以Hell-world这个镜像为例来说明: 1. docker pull hello-world #拉取hell-world镜像 2. docker images # 查看本地拉取的镜像 或者可以用 docker im…...
《MySQL 简易速速上手小册》第2章:数据库设计最佳实践(2024 最新版)
文章目录 2.1 规划高效的数据库架构2.1.1 基础知识2.1.2 重点案例:在线电商平台2.1.3 拓展案例 1:博客系统2.1.4 拓展案例 2:库存管理系统 2.2 数据类型和表设计2.2.1 基础知识2.2.2 重点案例:个人健康记录应用2.2.3 拓展案例 1&a…...
利用YOLOv8 pose estimation 进行 人的 头部等马赛克
文章大纲 马赛克几种OpenCV 实现马赛克的方法高斯模糊pose estimation 定位并模糊:三角形的外接圆与膨胀系数实现实现代码实现效果参考文献与学习路径之前写过一个文章记录,怎么对人进行目标检测后打码,但是人脸识别有个问题是,很多人的背影,或者侧面无法识别出来人脸,那…...
【Python 千题 —— 基础篇】查找年龄
Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 班级中有 Tom、Alan、Bob、Candy、Sandy 五个人,他们组成字典 {Tom: 23, Alan: 24, Bob: 21, Candy: 22, Sandy: 21},字典的键是姓名,字典的…...
前后端通讯:前端调用后端接口的五种方式,优劣势和场景
Hi,我是贝格前端工场,专注前端开发8年了,前端始终绕不开的一个话题就是如何和后端交换数据(通讯),本文先从最基础的通讯方式讲起。 一、什么是前后端通讯 前后端通讯(Frontend-Backend Commun…...
Mysql大表添加字段失败解决方案
背景 最近遇到一个问题,需要在user用户表千万级别数据中添加两个字段,发现老是加不上去,一直卡死。表数据量不仅大,而且是一个热点表,访问频率特别高,而且该表的访问是在一个大事务中。加字段的时候一直在…...
(52)只出现一次的数字III
文章目录 每日一言题目解题思路代码结语 每日一言 十年磨一剑,风雨未曾阻挡;愿你乘风破浪,不负韶华时光。 题目 题目链接:只出现一次的数字 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
