第十七章:c语言内存函数

1. memcpy使⽤和模拟实现

2. memmove使⽤

3. memset函数的使⽤

4. memcmp函数的使⽤

              天行健  君子以自强不息

一、memcpy的使用和模拟实现
在这里插入图片描述

作用:
1.
函数memcpy从source的位置向后复制num个字节的数据到destination指向的内存位置。
2.
这个函数在遇到‘\0’的时候不会停下来(该函数不检查源中是否有任何终止null字符——它总是精确地复制num个字节。)
3.如果source和destination有任何的重叠,复制的结果都是未定义的。

1.1直接使用

int main()
{int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 };int len = sizeof(arr1) / sizeof(arr1[0]);int arr2[10] = { 0 };memcpy(arr2, arr1, sizeof(arr1));//这个是一个字节为单位的for (int i = 0; i < len; i++){printf("%d ", arr2[i]);}
}

1.2 模拟实现

#include<assert.h>
void* my_memcpy(void * pr2, const void* pr1, size_t count)
{void* ret = pr2;  //先把起始的地址储存起来assert(pr2 != NULL);assert(pr1 != NULL);while (count--){//因为我们这里的单位是一个字节,所以我们要一个一个的访问比较好//这里是int类型的我们可以先转化为char类型的指针来进行操作*(char *)pr2 = *(char *)pr1;pr1 = (char*)pr1 + 1;pr2 = (char*)pr2 + 1;}return ret;
}int main()
{int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 };int len = sizeof(arr1) / sizeof(arr1[0]);int arr2[10] = { 0 };int  * pr =	my_memcpy(arr2, arr1, sizeof(arr1)); //这里的是int类型的 所以接收也需要int * 类型的指针for (int i = 0; i < len; i++){printf("%d ", *(pr+i));}return 0;
}

注意该函数不可以处理自己,会出现以下的错误

在这里插入图片描述

在这里插入图片描述
二、memmove使用
在这里插入图片描述
1.和memcpy 的差别就是memmove函数允许目标内存块的重叠
2.如果源空间和目标函数出现重叠,就要使用memmove函数处理

#include<stdio.h>
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[20];int len = sizeof(arr1) / sizeof(arr1[0]);memmove(arr1+2 , arr1, 20);for (int i = 0; i < len; i++){printf("%d ", arr1[i]);}return 0;
}

三、memset函数的使用
在这里插入图片描述
memset 函数是用来设置函数的,将内存储存的值以字节为单位设置成想要的内容

#include<stdio.h>
#include<string.h>
//void* memset(void* ptr, int value, size_t num);
int main()
{char arr[10] = { "abcdefghj" };int num = sizeof(arr) / sizeof(arr[0]);//传进去的地址,设置的内容,设置字节的长度char * ret =  (char * )memset(&arr[1], 'x', 4);for (int i = 0; i < num; i++){printf("%c ", arr[i]);}return 0;
}

四、memncmp函数的使用

在这里插入图片描述

比较从ptr1和ptr2指针指向的位置开始,向后的num个字节
返回值如下:
在这里插入图片描述

int print(void)
{char arr3[20] = "abcd";char arr4[20] = "abcd";int num1 = memcmp(arr3, arr4, sizeof(arr3));return num1;}
int main()
{char arr1[20] = "i am a student";char arr2[20] = "i am a stuDent";// arr1与arr2比较,比较的个数int num = memcmp(arr1, arr2, sizeof(arr1));printf("%d\n", num);if (num > 0){printf("arr1>arr2\n");}else if (num < 0){printf("arr1<arr2\n");}else{printf("arr1=arr2\n");}int ret = print();printf("%d\n",ret);return 0;
}

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

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

相关文章

进程状态及优先级

目录 一、进程状态 二、进程优先级 三、Linux内核进程调度队列 一、进程状态 在一般的教科书中&#xff0c;都会对进程有以下的分类&#xff1a; 至于落实到Linux&#xff0c;进程的状态是什么样子的呢&#xff1f; //这是Linux中对进程状态的描述 /* * The task state arra…

【二十七】【QT开发应用】VS如何复制项目,QT无边窗窗口Pro版本,信号与信号槽的应用,背景图片自适应控件大小

VS复制项目 在使用VS的过程中,有的时候我们需要复制我们已经存在的项目. 我们可以先创建一个新的项目. 接着把需要复制的项目的文件复制粘贴到新的项目文件夹中. 不要忘记添加现有项目. CFrameLessWidgetBase.h #pragma once #include <QWidget> class CFrameLessWi…

系统架构设计师④:计算机网络

系统架构设计师④&#xff1a;计算机网络 TCP/IP协议族 模型如下&#xff1a; 常用的协议及端口号&#xff1a; 各个协议能力介绍&#xff1a; TCP与UDP的对比&#xff1a; DNS协议 DSN&#xff1a;域名系统( Domain Name System) 支持两种查询方式 &#xff1a; ①递…

elasticsearch设置账号和密码

1、es安装&#xff0c;挂载路径根据实际情况修改 docker run -d --restart always \ --name es \ -e "ES_JAVA_OPTS-Xms512m -Xmx512m" \ -e "discovery.typesingle-node" \ -e "TZAsia/Shanghai" \ -v /mnt/data/efk/es/data:/usr/share/elast…

uniapp使用字体图标 ttf svg作为选项图标,还支持变色变图按

在staic目录下有一些ttf文件&#xff0c;如uni.ttf&#xff0c;iconfont.ttf 这些文件中保存这字体svg的源码们&#xff0c;我们也可以在网上找其他的。这些就是我们要显示的突图标的 显示来源。这样不用使用png图标&#xff0c;选中不选中还得用两个图片 我的具体使用如下 &q…

新手教学系列——用 VSCode 实现高效远程开发

随着软件开发环境日益复杂,远程开发已成为许多开发者的日常工作方式。尤其当项目需要直接在服务器上运行或本地计算资源有限时,能够使用一款便捷、强大的工具至关重要。在众多 IDE 中,VSCode 因其轻量、灵活且支持丰富插件,成为远程开发的理想选择。本文将详细介绍如何通过…

PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三)

作为“贴代码”力推的一个CRUD实践项目PasteTemplate,在对现有的3个项目进行实战后效果非常舒服&#xff01;下面就针对PasteForm为啥我愿称为最佳CRUD做一些回答: 哪里可以下载这个PasteForm的项目案例 目前“贴代码”对外使用PasteForm的项目有"贴Builder(PasteSpide…

[云服务器18] 搭建AIGC APP?AI绘图不神秘!

好的这是我的第18篇blog了&#xff01;开心max&#xff01; 那么&#xff0c;这次我们来做些什么呢……&#xff08;思考中&#xff09; 此时的我拿起了手机&#xff0c;打开了某APP&#xff0c;然后赫然出现的广告&#xff1a; 现在是AI的时代&#xff0c;为什么不来学习AIGC…

《开题报告》基于SSM框架的电影评论网站的设计与实现源码++学习文档+答辩讲解视频

开题报告 研究背景 随着互联网技术的飞速发展&#xff0c;网络已成为人们获取信息、交流思想、分享体验的重要平台。在电影产业蓬勃发展的今天&#xff0c;观众对于电影的选择不再仅仅依赖于传统的宣传渠道&#xff0c;而是更加倾向于通过在线平台了解影片内容、观看预告片、…

Mybatis的基本使用

什么是Mybatis&#xff1f; Mybatis是一个简化JDBC的持久层框架&#xff0c;MyBatis是一个半自动化框架&#xff0c;是因为它在SQL执行过程中只提供了基本的SQL执行功能&#xff0c;而没有像Hibernate那样将所有的ORM操作都自动化了。在MyBatis中&#xff0c;需要手动编写SQL语…

第十三章 集合

一、集合的概念 集合&#xff1a;将若干用途、性质相同或相近的“数据”组合而成的一个整体 Java集合中只能保存引用类型的数据&#xff0c;不能保存基本类型数据 数组的缺点&#xff1a;长度不可变 Java中常用集合&#xff1a; 1.Set(集):集合中的对象不按特定方式排序&a…

工具模块及项目整体模块框架

文章目录 工具模块logger.hpphelper.hppthreadpool.hpp 核心概念核心API交换机类型持久化⽹络通信消息应答持久化数据管理中心模块虚拟机管理模块交换路由模块消费者管理模块信道管理模块连接管理模块Broker服务器模块消费者管理信道请求模块通信连接模块项⽬模块关系图 工具模…

ScrapeGraphAI 大模型增强的网络爬虫

在数据驱动的动态领域&#xff0c;从在线资源中提取有价值的见解至关重要。从市场分析到学术研究&#xff0c;对特定数据的需求推动了对强大的网络抓取工具的需求。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线…

电脑出现msvcp140.dll丢失的解决方法,总结6种解决方法

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中最常见的就是“msvcp140.dll丢失”的错误。这个错误提示通常出现在运行某个程序时&#xff0c;它意味着计算机无法找到所需的msvcp140.dll文件。那么&#xff0c;msvcp140.dll丢失是怎么回事呢&#…

69 BERT预训练_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录NLP里的迁移学习Bert的动机Bert架构对输入的修改五、预训练任务1、2、3、 六、1、2、3、 七、1、2、3、 八、1、2、3、 NLP里的迁移学习 之前是使用预训练好的模型来抽取词、句子的特征&#xff0c;例如 word2vec 或语言模型这种非深度学习…

银河麒麟V10如何关闭定期锁屏功能?

银河麒麟V10如何关闭定期锁屏功能? 1. 打开终端2. 执行命令3. 验证设置 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在银河麒麟高级服务器操作系统V10中&#xff0c;关闭定期锁屏功能很简单。使用场景&#xff1a;比如&#xff0c;当你…

大模型~合集6

我自己的原文哦~ https://blog.51cto.com/whaosoft/11566566 # 深度模型融合&#xff08;LLM/基础模型/联邦学习/微调等&#xff09; 23年9月国防科大、京东和北理工的论文“Deep Model Fusion: A Survey”。 深度模型融合/合并是一种新兴技术&#xff0c;它将多个深度学习模…

.NET CORE程序发布IIS后报错误 500.19

发布IIS后浏览时报错误500.19&#xff0c;同时配置文件web.config的路径中也存在问号“?”。 可能原因&#xff1a;没有安装运行时

CMU 10423 Generative AI:lec14(Vision Language Model:CLIP、VQ-VAE)

文章目录 1 概述2 CLIP (Used in GPT-V)3 VQ-VAE (Used in Gemini)**VQ-VAE 详细笔记****VQ-VAE 的模块组成与数据流** **1. 输入数据****2. 编码器&#xff08;Encoder&#xff09;****2.1 编码器的作用****2.2 数据流与维度变化****2.3 编码器输出** **3. 量化器&#xff08;…

手机使用指南:如何在没有备份的情况下从 Android 设备恢复已删除的联系人

在本指南中&#xff0c;您将了解如何从 Android 手机内存中恢复已删除的联系人。Android 诞生、见证并征服了 80% 的智能手机行业。有些人可能将此称为“非常大胆的宣言”&#xff0c;但最近的统计数据完全支持我们的说法。灵活性、高度改进的可用性和快速性是 Android 操作系统…