关于C语⾔内存函数 memcpy 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 arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };memcpy(arr2, arr1, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}

拷贝结束后返回目标空间的起始地址

模拟实现

#include <string.h>
#include <stdio.h>
#include<assert.h>
void* my_memcpy(void* dst, const void* src, size_t count)
{void* ret = dst;assert(dst);assert(src);while (count--) {*(char*)dst = *(char*)src;dst = (char*)dst + 1;src = (char*)src + 1;}return(ret);
}
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };my_memcpy(arr2, arr1, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}

memmove 使和模拟实现

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

和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。
如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。

使用

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

模拟实现

分情况1

情况2

有的情况从后向前拷贝,有的从前向后拷贝,分析总结

模拟实现代码

//模拟实现memmove
//void * memmove ( void * destination, const void * source, size_t num );
#include<stdio.h>
void* my_memmove(void* dest, const void* source, size_t num)
{void* ret = dest;if (dest < source)//dest 在src左边,从前向后拷贝{while (num--){*(char*)dest = *(char*)source;dest=(char*)dest + 1;source=(char*)source + 1;}}else {//dest 在src右边以及重合,从后向前拷贝while (num--){*((char*)dest + num) = *((char*)source + num);}}return ret;
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}printf("\n");my_memmove(arr + 2, arr, 20);for (int i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

结果

memset 函数的使⽤

memset是⽤来设置内存的,将内存中的值 以字节为单位 设置成想要的内容。
void * memset ( void * ptr, int value, size_t num );

使用

#include <stdio.h>
#include <string.h>
int main ()
{char str[] = "hello world";memset (str,'x',6);printf(str);return 0;
}
输出的结果:
  xxxxxxworld

memcmp 函数的使⽤

⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节   

与str系类相似但是sy=tr系类只能比较字符串

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

使用,此函数比较内存块,任何类型都可以不受限制

与str系类相似但是sy=tr系类只能比较字符串

#include <stdio.h>
#include <string.h>
int main()
{char buffer1[] = "DWgaOtP12df0";char buffer2[] = "DWGAOTP12DF0";int n;n = memcmp(buffer1, buffer2, sizeof(buffer1));if (n > 0) printf("'%s' is greater than '%s'.\n", buffer1, buffer2);else if (n < 0) printf("'%s' is less than '%s'.\n", buffer1, buffer2);elseprintf("'%s' is the same as '%s'.\n", buffer1, buffer2);return 0;
}

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

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

相关文章

基于方块编码的图像压缩matlab仿真,带GUI界面

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 编码单元的表示 4.2编码单元的编码 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 下图是随着方块大小的变化&#xff0c;图像的压缩率以及对应的图像质量指标PSN…

本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?

当前&#xff0c;各大平台的本地生活服务业务日渐兴盛&#xff0c;提高创业者入局意向的同时&#xff0c;也让本地生活服务项目有哪些等问题也成为了多个创业者社群中的热议对象。而从目前的讨论情况来看&#xff0c;在创业者们所询问的众多本地生活服务项目中&#xff0c;通过…

uniapp 游戏 - 使用 uniapp 实现的扫雷游戏

0. 思路 1. 效果图 2. 游戏规则 扫雷的规则很简单。盘面上有许多方格,方格中随机分布着一些雷。你的目标是避开雷,打开其他所有格子。一个非雷格中的数字表示其相邻 8 格子中的雷数,你可以利用这个信息推导出安全格和雷的位置。你可以用右键在你认为是雷的地方插旗(称为标…

安卓/iOS H5传递动态参数方法,App渠道归因方案

需求和痛点 负责渠道分发的部门都需要收集区分不同安装渠道的转化量&#xff08;注册、付费等数据&#xff09;做数据分析&#xff0c;通常包括官网跳转、KOL营销、用户分享、广告投放、活动拉新等多个渠道。 场景 用户在网页上进行用户行为&#xff0c;产生了数据&#xff0c…

Vue 项目文件大小优化

优化逻辑 任何优化需求&#xff0c;都有一个前提&#xff0c;即可衡量。 那 Vue 加载速度的优化需求&#xff0c;本质上是要降低加载静态资源的大小。 所以&#xff0c;优化前&#xff0c;需要有一个了解项目现状的资源加载大小情况。 主要分 3 步走&#xff1a; 找到方法测…

ZYNQ使用XGPIO驱动外设模块(前半部分)

目录 目录 一、新建BD文档&#xff0c;添加ZYNQ处理器 1.BD文档: 2.在Vivado中&#xff0c;BD文件的生成过程通常包括以下步骤&#xff1a; 1)什么是Tcl Console: 3.PL部分是FPGA可编程逻辑部分&#xff0c;它提供了丰富的IO资源&#xff0c;可以用于实现各种硬件接口和功…

3dsMax添加天空盒

点击渲染&#xff0c;环境 &#xff0c; 点击位图 找到要设置的天空HDR&#xff0c;可以使用HDR(EXR)贴图 一个可以下载HDR贴图的网站 https://polyhaven.com/hdris在渲染的时候不要使用使用微软输入法&#xff0c;3dsmax会卡死&#xff0c; 在渲染的时候不要使用使用微软…

【Kubernetes】常见面试题汇总(五十九)

目录 129.问题&#xff1a;pod 使用 PV 后&#xff0c;无法访问其内容&#xff1f; 130.查看节点状态失败&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xf…

《向量数据库指南》 ——KG-RAG 新突破:有限跳数假设下的高效解法

我们观察到在实际的 KG-RAG 场景中,存在跳数有限性假设:在 KG-based RAG 中,实际问的 query 问题的查询路由只需要在知识图谱中进行有限的,且很少的跳数(如少于4跳)的查询,而并不需要在其中进行非常多次跳数。 我们的跳数有限性假设基于两点很重要的观察:1. query 复杂…

自然语言处理(NLP)论文数量的十年趋势:2014-2024

引言 近年来&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为人工智能&#xff08;AI&#xff09;和数据科学领域中的关键技术之一。随着数据规模的不断扩大和计算能力的提升&#xff0c;NLP技术从学术研究走向了广泛的实际应用。通过观察过去十年&#xff08;2014…

基于Zabbix进行服务器运行情况监测

文章目录 引言I Zabbix主要构成下载并安装Zabbix被监控主机安装zabbix agent创建被监控主机报警设置II 常见问题cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)重置 Zabbix Web 界面密码Zabbix agent i…

还做单元测试吗?

软件单元测试分为狭义的单元测试和广义的单元测试。 前者是指对被测代码的各种函数、接口等进行测试&#xff0c;以验证它们的功能、性能和安全性。 后者是指对页面的每一个组件&#xff08;如文本框、按钮等&#xff09;进行测试&#xff0c;以验证它们的功能、性能和安全性…

MySQL学习笔记(持续更新,目前到十一章锁)

1、Mysql概述 1.1 数据库相关概念 三个概念&#xff1a;数据库、数据库管理系统、SQL 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Mangement System&#xf…

【Qt】详细Qt基础 (包括自定义控件)

目录 QT 概述创建项目项目文件&#xff08;. pro&#xff09;main.cppmainwindow.uimainwindow.hmainwindow.cpp 窗口类QWidget 窗口显示QDialog 窗口 QPushButton创建显示 对象树基本概念功能 坐标体系控件Item WidgetsQListWidgetQTreeWidgetQTableWidget 自定义控件 QT 概述…

AI免费文档处理在线工具:ColPali文本检索文档

1、ColPali 原理还是对比学习&#xff0c;图像和文本&#xff0c;文档通过图像模型&#xff0c;文本通过大模型gemma https://huggingface.co/spaces/manu/ColPali-demo 检索pdf

k8s 中存储之 PV 持久卷 与 PVC 持久卷申请

目录 1 PV 与 PVC 介绍 1.1 PersistentVolume&#xff08;持久卷&#xff0c;简称PV&#xff09; 1.2 PersistentVolumeClaim&#xff08;持久卷声明&#xff0c;简称PVC&#xff09; 1.3 使用了PV和PVC之后&#xff0c;工作可以得到进一步的细分&#xff1a; 2 持久卷实验配置…

深度0.1%调光恒流芯片SL8701支持PWM调光 模拟调光 无频闪 多路共阳

一、芯片概述 SL8701是一款内置100V MOS的降压型高调光比LED恒流驱动芯片&#xff0c;专为智能调光调色照明研发设计。它支持多种调光方式&#xff0c;包括PWM调光和模拟调光&#xff0c;能够实现高调光比&#xff0c;满足不同场景的照明需求。 二、主要特性 PWM调光支持&am…

【Vue3】 h()函数的用法

目录 介绍 参数 使用案例 1.创建虚拟 DOM 元素 2. 组件的动态渲染 3. 创建功能组件 4.渲染动态属性 5. 使用插槽 6. 创建动态标签 介绍 h() 函数用于辅助创建虚拟 DOM 节点&#xff0c;它是 hypescript 的简称——能生成 HTML (超文本标记语言) 的 JavaScript&#x…

Unsupervised HDR Image and Video Tone Mapping via Contrastive Learning

Abstract 捕捉高动态范围 (HDR) 图像&#xff08;视频&#xff09;很有吸引力&#xff0c;因为它可以揭示黑暗和明亮区域的细节。 由于主流屏幕仅支持低动态范围&#xff08;LDR&#xff09;内容&#xff0c;因此需要色调映射算法来压缩HDR图像&#xff08;视频&#xff09;的…

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗&#xff1f;使用Python编程&#xff0c;你可以创造出独一无二的爱心图案&#xff0c;为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码&#xff0c;让你的创意和情感通过代码展现出来。 话不多说&#xff0c;咱…