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

memcpy、memmove、memcmp、memset函数的作用与区别

一、memcpy与memmove

1、memcpy

作用:从source的位置开始向后复制num个字节的数据到destination的内存位置。

注意:

  • memcpy() 函数在遇到 ’\0’ 的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来);
  • destination和source所指向的内容不能重叠,否则得不到想要的结果。

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

2、memmove

作用:从source的位置开始向后复制num个字节的数据并将其移动到destination的内存位置。

注意:和memcpy()函数的区别就是memmove()函数处理的原内存块和目标内存块是可以重叠。

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

3、memove与memcpy的区别与重叠内存问题

memmovememcpy的升级版,memmove是更加安全的。

详见:【C语言】浅谈memcpy与memmove 的区别_DanteIoVeYou的博客-CSDN博客


二、memcmp

作用:用于比较两个内存区域的内容。

int memcmp(const void * Buf1,const void * Buf2,size_t Size);

buf1:指向第一个内存区域的指针。
buf2:指向第二个内存区域的指针。
size:要比较的字节数。

  • 如果返回值 < 0,则表示 str1 小于 str2。
  • 如果返回值 > 0,则表示 str1 大于 str2。
  • 如果返回值 = 0,则表示 str1 等于 str2。

 


三、memset

作用:内存赋值函数,用来给某一块内存空间进行赋值的;包含在<string.h>头文件中。
详解:将已开辟内存空间s的首n个字节的值设为值c。
注意:该函数是按一个字节一个字节来给数组或者是结构体赋值。

void *memset(void *s, int v, size_t n)

s 是数组名,或指向某一内在空间的指针;
v 为要填充的值;
n 为要填充的字节数;

如果是字符类型数组的话,memset可以随便用,但是对于int类型的数组,一般只用来清0或者填充-1,如果是填充其他数据就会出错。


四、参考内容

【C语言】浅谈memcpy与memmove 的区别_DanteIoVeYou的博客-CSDN博客

C语言memcpy,memmove,memcmp,memset函数_sheygshsi的博客-CSDN博客

C/C++---memset、memcpy、memcmp函数简介_c/c++ 不同数组大小的memcpy_f斗牛士的博客-CSDN博客 

相关文章:

memcpy、memmove、memcmp、memset函数的作用与区别

一、memcpy与memmove 1、memcpy 作用&#xff1a;从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意&#xff1a; memcpy() 函数在遇到 ’\0’ 的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来)&#xff1b;destination和source…...

socket 到底是个啥

我相信大家在面试过程中或多或少都会被问到这样一个问题&#xff1a;你能解释一下什么是 socket 吗 我记得我当初的回答很是浅显&#xff1a;socket 也叫套接字&#xff0c;用来负责不同主机程序之间的网络通信连接&#xff0c;socket 的表现方式由四元组&#xff08;ip地址&am…...

奥威BI—数字化转型首选,以数据驱动企业发展

奥威BI系统BI方案可以迅速构建企业级大数据分析平台&#xff0c;可以将大量数据转化为直观、易于理解的图表和图形&#xff0c;推动和促进数字化转型的进程&#xff0c;帮助企业更好地了解自身的运营状况&#xff0c;及时发现问题并采取相应的措施&#xff0c;提高运营效率和质…...

vue中swiper使用

1.引包 说明&#xff1a;导入相应js引css import "Swiper" from "swiper" import "swiper/css/swiper.css"; import "swiper/js/swiper"; 2.结构 说明&#xff1a;必要的结构使用&#xff1b;直接封装成一个组件 <template>…...

webpack与vite区别

webpack和Vite作为两种常用的前端构建工具,主要有以下几点区别: 构建速度 webpack采用“打包”的方式构建,需要将所有模块打包成几个大的bundle文件,构建速度较慢。 Vite采用了“按需编译”的方式,只在浏览器请求时才编译对应模块,启动速度更快。 dev server webpack dev s…...

GLSL用于图像处理

Pipeline 硬件处理顶点和片段的Pipeline 软件的输入 顶点着色器 顶点的glsl 输入–特殊全局变量 变量 类型 指定函数 描述 gl_ Vertex vec4 glVertex 顶点的全局空间坐标 gl_Color vec4 glColor 主颜色值 gl_SecondaryColor vec4 glSecondaryColor 辅助颜色值 gl_Normal …...

即将发布的 Kibana 版本可运行 Node.js 18

作者&#xff1a;Thomas Watson Kibana 构建在 Node.js 框架之上。 为了确保每个 Kibana 版本的稳定性和使用寿命&#xff0c;我们始终将捆绑的 Node.js 二进制文件保持为最新的最新长期支持 (LTS) 版本。 当 Node.js 版本 18 升级到 LTS 时&#xff0c;我们开始将 Kibana 升级…...

基于遗传算法改进的支持向量机多分类仿真,基于GA-SVM的多分类预测,支持相机的详细原理

目录 背影 支持向量机SVM的详细原理 SVM的定义 SVM理论 遗传算法的原理及步骤 SVM应用实例,基于遗传算法优化SVM的多分类预测 完整代码包括SVM工具箱:https://download.csdn.net/download/abc991835105/88175549 代码 结果分析 展望 背影 多分类预测对现代智能化社会拥有重…...

MySQL5.7源码编译Debug版本

编译环境Ubuntu22.04LTS 1 官方下载MySQL源码 https://dev.mysql.com/downloads/mysql/?spma2c6h.12873639.article-detail.4.68e61a14ghILh5 2 安装基础软件 cmakeclangpkg-configperl 参考&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/source-installation-prere…...

ORA-48913: Writing into trace file failed, file size limit [50000000] reached

检查某环境的alert_orcl1.log时&#xff0c;发现有很多的ORA-48913报错&#xff0c;细节如下 Sat Jul 22 19:34:04 2023 Non critical error ORA-48913 caught while writing to trace file "/u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_dw00_138010.trc" E…...

线上Zookeeper问题解决记录

zookeeper问题: 日志目录: /home/cmccdata/app/zookeeper/logs dataDir/home/cmccdata/app/zookeeper/data/zoodata dataLogDir/home/cmccdata/app/zookeeper/data/zoolog 问题0: 2023-08-03 17:15:43,139 [myid:1] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:…...

Docker极速安装Jenkins

安装 Jenkins 是一个常见的任务&#xff0c;使用 Docker 进行安装可以简化该过程并确保环境一致性。以下是在 Docker 中安装 Jenkins 的详细步骤&#xff1a; 安装 Docker: 首先&#xff0c;请确保您已在目标机器上安装了 Docker。根据您的操作系统&#xff0c;可以在 Docker 官…...

TransnormerLLM 中 FlashLinearAttention 的纯pytorch实现

Github 仓库&#xff1a;https://github.com/One-sixth/flash-linear-attention-pytorch flash-linear-attention-pytorch 纯 Pytorch 实现 TransnormerLLM 中快速线性注意力算子。 用于学习目的。 如果你希望用于训练模型&#xff0c;你可能要修改为 CUDA 或 Triton 的实现&…...

从NPM注册中心获取包

目录 1、搜索和选择要下载的包 1.1 为什么使用 1.2 工作原理 1、质量 2、维护 3、受欢迎程度 4、名气 1.1、开始搜索包 2、在本地安装下载和安装软件包 2.1 安装未限定作用域的包 2.2 安装有作用域的公共包 2.3 安装私有包 2.4 测试包安装 2.5 已安装的软件包版本…...

Elastic的下载

文章目录 ElasticSearch的下载扩展1&#xff08;ElasticSearch 与 JDK 版本 适配&#xff09;扩展2&#xff08;访问 http://192.168.1.200:9200 没有显示信息&#xff09;扩展3&#xff08;免密登录&#xff09; ElasticSearch的下载 官方下载网址&#xff1a;https://www.el…...

day52-Redis

Redis 1.Redis 1.1 RESP连接Redis 1.2 定义&#xff1a;是一个高性能的key-value数据库&#xff08;非关系型数据库&#xff09; 1.3 数据类型&#xff1a; key键的类型是字符串类型&#xff1b; 值的类型有五种&#xff1a;字符串String&#xff0c;哈希hash&#xff0…...

高效处理矢量大数据的高可用解决方案

高效处理矢量大数据的高可用解决方案 解决方案目标 存储海量矢量数据实时分析海量矢量数据实现海量矢量数据的可视化提供高可用、高性能和高可拓展性解决方案概述 海量数据查询与可视化 系统技术流程 方案一 数据存储: PostgreSQL+PostGIS(矢量数据存储和空间分析)数据服务…...

Docker Compose构建lnmp

目录 Compose的优点 编排和部署 Compose原理 Compose应用案例 安装docker-ce 阿里云镜像加速器 安装docker-compose docker-compose用法 Yaml简介 验证LNMP环境 Compose的优点 先来了解一下我们平时是怎么样使用docker的&#xff1f;把它进行拆分一下&#xff1a; 1…...

Flutter开发问题记录

1. Q:Mac电脑通过AndroidStudio运行软件到iphone报错 automatically assigning platform iOS with version 10.0 on target Runner because no platform was specified. A:项目中ios目录下,Podfile文件第2行 platform :ios, ‘11.0’&#xff0c;取消注释 2. Q:Mac电脑通过And…...

如何使用本地mock数据

当后端同事接口数据还未完成&#xff0c;我们前端开发需要使用数据时&#xff0c;怎么办呢&#xff1f;这里可以自己本地mock数据先用着啦&#xff01;仅在开发时使用 1. 创建一个 xxx.js文件&#xff0c;对外暴露一个数组&#xff1b; 对新建js文件编写导出&#xff0c;返回数…...

XXL-JOB定时任务框架(Oracle定制版)

特点 xxl-job是一个轻量级、易扩展的分布式任务调度平台&#xff0c;能够快速开发和简单学习。开放源代码并被多家公司线上产品使用&#xff0c;开箱即用。尽管其确实非常好用&#xff0c;但我在工作中使用的是Oracle数据库&#xff0c;因为xxl-job是针对MySQL设计的&#xff…...

SpringBoot + ajax 实现分页和增删查改

0目录 1.SpringBoot 2.SpringBoot分页&#xff1b;增删改查 1.SpringBoot分页 创建数据库和表 创建SpringBoot工程&#xff0c;引入springboot下的分页依赖 配置application.yml 实体类 Mapper接口 Mapper.xml Service接口 Service实现类 控制层 测试 加…...

ProxyGenerator-代理类生成器

ProxyGenerator是JDK-sun包下提供的用于生成动态代理类信息的类&#xff0c;其唯一向外透出的是其静态方法-generateProxyClass(…)。 public class ProxyGenerator { ... }学习本篇文章&#xff0c;就是想学习ProxyGenerator如何生成代理类信息的过程。 一、唯一入口-公开静…...

ARM 内存屏障指令

ARM 内存屏障指令 1. dmb (Data Memory Barrier) 数据内存栅栏2. dsb (Data Synchronization Barrier) 数据同步栅栏3. isb (Instruction Synchronization Barrier) 指令同步栅栏4. ARM 内存屏障指令如何选择使用&#xff1f;5. 使用示例5.1. DMB指令示例&#xff1a;5.2. DSB指…...

了解Linux 的 mmap --- 笔记

学习这篇博客&#xff0c;进行了一些归纳Linux下mmap_linux mmap_一个山里的少年的博客-CSDN博客https://blog.csdn.net/qq_56999918/article/details/127070280 >>读取文件 读取文件方法&#xff1a;由操作系统提供的两个方法&#xff0c;read和write来读写文件。 由…...

docker删除容器(步骤详解)

要在Docker中删除容器&#xff0c;需要使用命令docker rm。 下面是详细步骤&#xff1a; 1. 首先&#xff0c;使用docker ps命令查看当前正在运行的容器。这个命令会列出所有正在运行的容器的ID、名称、状态等信息。 如果没有正在运行的容器可以通过docker ps -a 查看当前所…...

boost beast http server 测试

boost beast http client boost http server boost beast 是一个非常好用的库&#xff0c;带上boost的协程&#xff0c;好很多东西是比较好用的&#xff0c;以下程序使用四个线程开启协程处理进入http协议处理。协议支持http get 和 http post #include <boost/beast/cor…...

Android 10.0 系统开启禁用adb push和adb pull传输文件功能

1.使用场景 在进行10.0的系统开发中,在一些产品中由于一些开发的功能比较重要,防止技术点外泄在出货产品中,禁用 adb pull 和adb push等命令 来获取系统system下的jar 和apk 等文件,所以需要禁用这些命令 2.系统开启禁用adb push和adb pull传输文件功能的分析 看了下系统…...

浙大数据结构第七周之07-图4 哈利·波特的考试

基础知识&#xff1a;&#xff08;最短路的前提都是在图中两条边之间的权值非定值&#xff09; &#xff08;一&#xff09;Dijkstra方法 算法实现&#xff1a; …...

vue2-vue项目中你是如何解决跨域的?

1、跨域是什么&#xff1f; 跨域本质是浏览器基于同源策略的一种安全手段。 同源策略&#xff08;sameoriginpolicy&#xff09;&#xff0c;是一种约定&#xff0c;它是浏览器最核心也是最基本的安全功能。 所谓同源&#xff08;即指在同一个域&#xff09;具有以下三个相同点…...