C语言内存函数:介绍使用及其模拟实现

memcpy - 内存拷贝

void*memcpy(void*destination,constvoid*source,size_t num);
  • 从source位置开始向后复制num个字节到destination指向的内存位置
  • 不会在遇到’\0’时停下来
  • 如果source和destination有重叠,复制结果是未定义的
  • 适用于非重叠内存区域的拷贝

使用示例

#include<stdio.h>#include<string.h>intmain(){intarr1[]={1,2,3,4,5,6,7,8,9,10};intarr2[10]={0};memcpy(arr2,arr1,20);// 拷贝20个字节(5个int)for(inti=0;i<10;i++){printf("%d ",arr2[i]);}// 输出: 1 2 3 4 5 0 0 0 0 0return0;}

模拟实现

void*memcpy(void*dst,constvoid*src,size_t count){void*ret=dst;assert(dst);assert(src);/* copy from lower addresses to higher addresses */while(count--){*(char*)dst=*(char*)src;dst=(char*)dst+1;src=(char*)src+1;}returnret;}

memmove - 可处理重叠的内存拷贝

void*memmove(void*destination,constvoid*source,size_t num);
  • 与memcpy功能类似,但可以处理源内存块和目标内存块重叠的情况
  • 如果源空间和目标空间出现重叠,必须使用memmove函数

使用示例

#include<stdio.h>#include<string.h>intmain(){intarr1[]={1,2,3,4,5,6,7,8,9,10};memmove(arr1+2,arr1,20);// 将前5个元素拷贝到从第3个元素开始的位置for(inti=0;i<10;i++){printf("%d ",arr1[i]);}// 输出: 1 2 1 2 3 4 5 8 9 10return0;}

模拟实现

void*memmove(void*dst,constvoid*src,size_t count){void*ret=dst;if(dst<=src||(char*)dst>=((char*)src+count)){/* Non-Overlapping Buffers - 从低地址向高地址拷贝 */while(count--){*(char*)dst=*(char*)src;dst=(char*)dst+1;src=(char*)src+1;}}else{/* Overlapping Buffers - 从高地址向低地址拷贝 */dst=(char*)dst+count-1;src=(char*)src+count-1;while(count--){*(char*)dst=*(char*)src;dst=(char*)dst-1;src=(char*)src-1;}}returnret;}

memset - 内存设置

void*memset(void*ptr,intvalue,size_t num);
  • 将内存中的值以字节为单位设置成指定内容
  • 常用于初始化内存区域或清空数组

使用示例

#include<stdio.h>#include<string.h>intmain(){charstr[]="hello world";memset(str,'x',6);// 将前6个字节设置为'x'printf("%s\n",str);// 输出: xxxxxxworld// 也可以用于初始化数组intarr[10];memset(arr,0,sizeof(arr));// 将整个数组初始化为0return0;}

memcmp - 内存比较

intmemcmp(constvoid*ptr1,constvoid*ptr2,size_t num);
  • 比较从ptr1和ptr2指针开始向后的num个字节
  • 无符号字符的方式逐字节比较
返回值含义
<0第一个不匹配的字节在prt1中的值小于prt2中的值
=0两个内存块的内容相等
>0第一个不匹配的字节在prt1中的值大于prt2中的值

使用示例

#include<stdio.h>#include<string.h>intmain(){charbuffer1[]="DWgaOtP12df0";charbuffer2[]="DWGAOTP12DF0";intn;n=memcmp(buffer1,buffer2,sizeof(buffer1));if(n>0)printf("'%s' is greater than '%s'.\n",buffer1,buffer2);elseif(n<0)printf("'%s' is less than '%s'.\n",buffer1,buffer2);elseprintf("'%s' is the same as '%s'.\n",buffer1,buffer2);return0;}

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

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

相关文章

初识Jmeter

1、Jmeter体系结构元件&#xff1a;代表Jmeter工具菜单中的一个子菜单&#xff08;功能&#xff09;&#xff0c;比如HTTP请求、事务控制器、响应断言等&#xff0c;就是一个元件。多个类似功能组件的容器&#xff08;类似于类&#xff09;常见的元件类型有&#xff1a; 1. 取样…

技术资产管理:智能复用评估

技术资产管理:智能复用评估 关键词:技术资产管理、智能复用评估、技术复用、资产价值评估、技术资源优化 摘要:本文聚焦于技术资产管理中的智能复用评估这一关键议题。首先阐述了技术资产管理及智能复用评估的背景,明确目的、范围、预期读者等内容。接着详细介绍核心概念与…

【计算机毕业设计案例】基于SpringBoot的大学生综合素质测评系统设计与实现基于SpringBoot的学生身体素质测评管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于SpringBoot的水族馆鱼类商品销售与经营管理系统基于SpringBoot的水族馆商品销售与经营管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

无线网络仿真:6G网络仿真_(19).6G网络仿真未来趋势

6G网络仿真未来趋势 1. 6G网络仿真概述 6G网络仿真是在6G网络研究和开发中不可或缺的一部分。通过仿真&#xff0c;研究人员可以验证理论模型、评估网络性能、测试新算法和技术&#xff0c;以及预测未来网络的行为。6G网络仿真不仅涵盖了传统的无线通信仿真技术&#xff0c;还引…

无线网络仿真:6G网络仿真_(20).6G网络仿真实践项目

6G网络仿真实践项目 项目背景 随着5G技术的普及和6G技术的研究不断深入&#xff0c;无线网络仿真成为研究和开发6G网络的关键工具之一。6G网络仿真不仅能够帮助研究人员验证新的通信协议和算法&#xff0c;还能为网络规划和优化提供有价值的参考。本节将详细介绍一个具体的6G网…

无线网络仿真:Wi-Fi网络仿真_(3).仿真软件介绍与使用

仿真软件介绍与使用 在进行无线网络仿真时&#xff0c;选择合适的仿真软件至关重要。本节将详细介绍几种常用的Wi-Fi网络仿真软件&#xff0c;包括NS-3、OMNeT和MATLAB&#xff0c;并提供具体的使用方法和示例代码。 NS-3 仿真软件 NS-3&#xff08;Network Simulator 3&#x…

无线网络仿真:6G网络仿真_(15).6G网络仿真参数设置

6G网络仿真参数设置 在进行6G网络仿真时&#xff0c;参数设置是至关重要的一步。合理的参数设置不仅能够确保仿真的准确性&#xff0c;还能有效提升仿真的效率。本节将详细讨论6G网络仿真的参数设置&#xff0c;包括物理层参数、链路层参数、网络层参数和应用层参数。我们将结合…

智能编程平台:低代码开发实践

智能编程平台&#xff1a;低代码开发实践关键词&#xff1a;智能编程平台、低代码开发、开发实践、可视化编程、自动化代码生成摘要&#xff1a;本文围绕智能编程平台的低代码开发实践展开。首先介绍了低代码开发的背景和相关概念&#xff0c;包括目的、预期读者、文档结构等。…

大数据浪潮下,ClickHouse的破局之道

大数据浪潮下,ClickHouse的破局之道:从原理到实践的实时分析加速指南 引言:当大数据分析遇到“慢”的瓶颈 深夜11点,电商数据分析师小周盯着电脑屏幕皱起眉头——他要统计“双11”当天10亿条用户行为数据中的Top10热门商品,用Hive跑查询已经等了40分钟,结果还没出来。而…

大数据建模中的向量化处理:SIMD指令优化计算

大数据建模中的向量化处理&#xff1a;SIMD指令优化计算——从"单柜台结账"到"流水线工厂"的效率革命 关键词 SIMD指令集、向量化处理、数据并行、指令级并行、缓存友好、大数据建模、CPU优化 摘要 在大数据建模场景中&#xff0c;计算效率是制约模型训练速…

别再重复造轮子!AI应用架构师:企业AI中台可复用组件库建设,附开发规范

别再重复造轮子&#xff01;AI应用架构师&#xff1a;企业AI中台可复用组件库建设&#xff0c;附开发规范 关键词&#xff1a;AI中台、可复用组件库、开发规范、企业AI应用、架构设计、AI技术整合、组件化开发 摘要&#xff1a;本文深入探讨企业AI中台可复用组件库的建设。从…

这3个内幕曝光,了解洁净室专用电话机的技术内核!

“看似简单的【洁净室专用电话机】,选错细节可能导致交叉污染风险、通讯中断、降级失败。” 作为制药厂、实验室洁净室工程的常用通讯设备,一部功能可靠的洁净室专用电话机至关重要。它不仅关乎信息传递的效率,更直接关系到洁净环境的维持与合规性。然而,许多用户甚至采购商…

计算机毕设 java 基于协同过滤算法的就业推荐系统的设计与实现 基于协同过滤算法的智能就业推荐平台 求职与企业招聘匹配系统

计算机毕设 java 基于协同过滤算法的就业推荐系统的设计与实现&#xff08;配套有源码、程序、MySQL 数据库、论文&#xff09;&#xff0c;本套源码可先查看功能演示视频&#xff0c;文末有联xi 可分享c系统核心功能涵盖注册登录、个人中心、多角色管理&#xff08;管理员、用…

【毕业设计】基于Java的学生身体素质测评管理系统基于SpringBoot的学生身体素质测评管理系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

计算机毕设 java 基于智能机器人的智能答疑系统的设计与实现 基于智能机器人的交互式答疑平台 师生问答与知识交流系统

计算机毕设 java 基于智能机器人的智能答疑系统的设计与实现&#xff08;配套有源码、程序、MySQL 数据库、论文&#xff09;&#xff0c;本套源码可先查看功能演示视频&#xff0c;文末有联xi 可分享传统答疑模式存在响应不及时、交流效率低、资源共享不足等问题&#xff0c;影…

【信号处理】通过 “最近邻匹配” 和 “球面线性插值(SLERP)” 两种方式将 GNSS 位姿(位置 + 四元数)插值到激光雷达时间戳附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

【单相STATCOM】单相STATCOM在单相系统中补偿无功功率,并减轻谐波附Simulink仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…

Unity3D 绿色家园 垃圾分类

基于 Unity3D 引擎开发&#xff0c;系统包含垃圾分类解说、“你是什么垃圾”、宣传短片播放和返回首页四个模块。用户可点击不同颜色的垃圾桶图标查看图文与语音解说&#xff0c;输入垃圾名称即可快速查询分类及相关信息&#xff1b;短片播放支持快进、后退、音量调节、进度控制…

必学!提示工程领域认证及进阶的要点全解析

必学&#xff01;提示工程领域认证及进阶要点全解析——从入门到精通的终极指南 关键词 提示工程&#xff08;Prompt Engineering&#xff09;、大语言模型&#xff08;LLM&#xff09;、Prompt Design、认证体系、链式思考&#xff08;CoT&#xff09;、应用场景、未来趋势 摘…