C语⾔:内存函数

devtools/2024/9/23 6:27:42/

1. memcpy使⽤和模拟实现(对内存块的复制,不在乎类型)

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

• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。

• 这个函数在遇到 '\0' 的时候并不会停下来。

• 如果source和destination有任何的重叠,复制的结果都是未定义的。

注意:num代表字节。

memcpy函数的模拟实现:

void*:针对各种类型的传参;

assert:断言不为空指针;

count--:循环20次;

使用*char类型来解引用,一次访问一个字节; 

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

2. memmove使⽤和模拟实现

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

• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。

 • 如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。

memmove的模拟实现:

3. memset函数的使⽤

void * memset ( void * ptr, int value, size_t num );

void*ptr:指向被填充内存块的指针;

int value:被设置成的内容。

memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。

4. memcmp函数的使⽤(内存块的比较)

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

void *:代表什么类型都可以比较)

• ⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节(num最多比较的个数)

 • 返回值如下:


http://www.ppmy.cn/devtools/45573.html

相关文章

【Leetcode笔记】40.组合总和II

1. 题目要求 这道题目和39.组合总和不一样的地方在于:数组中含有相同的元素。同样地,结果不能含有重复组合。 拿第一个示例来看, candidates [1, 1, 2, 5, 6, 7, 10]问题在于:第一个path[1(index 0), 2],绝不能出现…

JAVA:Random详解

Java中的java.util.Random类用于生成伪随机数。它提供了多种方法来生成不同类型的随机数,包括整数、浮点数和布尔值。以下是对Random类及其主要方法的详细介绍 一、生成随机数 创建一个Random对象,可以使用以下两种方式: 无参构造函数&…

面试八-存泄漏是什么,有哪几种,怎么解决?

一、内存泄漏几种情况 当使用基类指针指向派生类对象时,如果基类的析构函数不是虚函数,那么在使用基类指针来删除这个对象时,只会调用基类的析构函数,而不会调用派生类的析构函数。这就导致了派生类中的资源无法正确释放&#xff…

Shell编程之正则表达式

正则表达式 概述 定义 regex,使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串 用途 可以通过正则表达式快速提取需要的信息 基础正则表达…

力扣14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl"示例 2: 输…

VTK9.2.0+QT5.14.0绘制三维显示背景

背景 上一篇绘制点云的博文中,使用的vtkCameraOrientationWidget来绘制的坐标轴,最近又学习到两种新的坐标轴绘制形式。 vtkOrientationMarkerWidget vtkAxesActor 单独使用vtkAxesActor能够绘制出坐标轴,但是会随着鼠标操作旋转和平移时…

52.WEB渗透测试-信息收集-CDN识别绕过(5)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:51.WEB渗透测试-信息收集-CDN识别绕过(4) 端口扫描其他内容参考&…

ORACLE中递归遍历

--查询全部资源信息 select * from urm_class_info --向上遍历树,找到路径直到根节点,指定的是parentid select distinct classid, parentid, namefrom urm_class_infostart with parentid cmdb0000000000000017 connect by prior parentid classid …