C语言进阶(5)——内存操作函数的解析

news2024/11/27 12:43:43

1.memcpy函数

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

用途:各种数据类型,从源数组拷贝num个字节到指定目标空间里面。
要点:
(1)函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
(2)这个函数在遇到 ‘\0’ 的时候并不会停下来。
(3)如果source和destination有任何的重叠,复制的结果都是未定义的。
运用实例

/* memcpy example */
#include <stdio.h>
#include <string.h>
struct {
 char name[40];
 int age;
} person, person_copy;
int main ()
{
 char myname[] = "Pierre de Fermat";
 /* using memcpy to copy string: */
 memcpy ( person.name, myname, strlen(myname)+1 );
 person.age = 46;
 /* using memcpy to copy structure: */
 memcpy ( &person_copy, &person, sizeof(person) );
 printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );
 return 0;
}

可以看见,memcpy函数即可以拷贝字符串,还可以拷贝整型的数据。
模拟实现memcpy函数

void* memcpy(void* destination, const void* source, size_t num)
{
	void* ret = destination;
	assert(destination && source);
	while (num--)
	{
		*(char*)destination = *(char*)source;
		destination = (char*)destination + 1;
		source = (char*)source + 1;
	}
	return ret;
}

2.memmove函数

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

用途:各种数据类型,从源数组拷贝num个字节到指定目标空间里面。可以防止覆盖时候出现的问题。
要点:
(1)和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
(2)如果源空间和目标空间出现重叠,就得使用memmove函数处理。
实例:

/* memmove example */
#include <stdio.h>
#include <string.h>
int main ()
{
 char str[] = "memmove can be very useful......";
 memmove (str+20,str+15,11);
 puts (str);
 return 0;

模拟实现memmove函数

void* memmove(void* destination, const void* source, size_t num)
{
	assert(destination && source);
	void* ret = destination;
	if (destination > source)
	{
		while (num--)
		{
			*(char*)destination = *(char*)source;
			destination = (char*)destination + 1;
			source = (char*)source + 1;
		}
	}
	else
	{
		while (num--)
		{
			*((char*)destination + num) = *((char*)source + num);
		}
	}
	return ret;
}

3. memcmp函数

用途:比较各种类型的数组的字节
要点:
在这里插入图片描述

4. memset函数

void *memset( void *dest, int c, size_t count );

要点:
memset - 内存设置函数
以字节为单位来设置内存中的数据的

参数解释:
dest 是目标空间的首地址;c是要改变的数据;count是要改变多少个字节。
运用实例:

int main()
{
	//char arr[] = "hello world";
	//memset(arr, 'x', 5);
	//printf("%s\n", arr);
	//memset(arr+6, 'y', 5);
	//printf("%s\n", arr);

	int arr[10] = { 0 };
	memset(arr, 0, 40);

	return 0;
}


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

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

相关文章

【虹科案例】虹科数字化仪在超声波中的应用以及如何选择合适的数字化仪

图 1&#xff1a;虹科M4i.4451-x8——用于采集超声波信号的 PCIe 4 通道 14 位 500 MS/s 数字化仪 超声波是一种频率大于人类听觉范围上限的声学声压波。超声波设备的工作频率从 20 kHz 到几千兆赫兹。表 1 总结了一系列常见的超声波应用的特性。 每个应用中使用的频率范围反映…

JSP SSM 仓库租赁管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP SSM 仓库租赁管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采…

C语言进阶——字符串函数和内存函数

目录 一. strlen 二. strcpy 三. strcat 四. strcmp 五. strncpy 六. strncat 七. strncmp 八. strstr 九. strtok 一. strlen 字符串以 \0 作为结束标志&#xff0c;strlen函数返回的是在字符串中 \0 前面出现的字符个数&#xff08;不包 含 \0 …

TCP/IP网络编程(1)——理解网络编程和套接字编程

文章目录一、理解网络编程和套接字编程1.1 socket套接字1.1.1 一个例子来表示TCP的网络连接1.1.2 程序实现1.2 文件操作1.2.1 文件描述符一、理解网络编程和套接字编程 1.1 socket套接字 网络编程又称为套接字编程&#xff0c;为什么要用套接字&#xff1f;我们把插头插到插座…

Linux常用命令——ngrep命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) ngrep 方便的数据包匹配和显示工具 补充说明 ngrep命令是grep命令的网络版&#xff0c;他力求更多的grep特征&#xff0c;用于搜寻指定的数据包。正由于安装ngrep需用到libpcap库&#xff0c; 所以支持大量的操…

【Java】面向对象笔记

开篇 主线 类及类的成员 属性、方法、构造器&#xff1b; 代码块&#xff0c;内部类 面向对象三大特征 继承、封装、多态 其他关键字 this,super,static,final,abstract,interface等 面向对象的两个要素 一、是什么 类&#xff1a;对一类事物的描述&#xff0c;是抽象的…

Java综合练习

Java综合练习一、涉及到的知识点二、卖飞机票三、找质数四、开发验证码五、数组元素的复制六、评委打分七、数字加密八、数字解密九、抢红包方法一&#xff1a;判断是否被抽取方法二&#xff1a;打乱数组十、模拟双色球土、二维数组一、涉及到的知识点 变量、数组运算符程序流…

python采集IP代理数据,防止数据采集IP被封情况

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 为什么要IP代理&#xff1a; 当采集数据, 批量采集数据, 请求速度过快, 网站可能会把你IP封掉 <你的网络进不去这个网站> IP代理换一个IP, 再去采集请求数据 一. 抓包分析数据来源 1. 明…

Runtime、ProcessBuilder的区别(Java中,两种方法来启动其他程序)

目录 ■Runtime、ProcessBuilder 区别&#xff1a; ■Java中提供了两种方法来启动其他程序 ■代码 ・Runtime ・ProcessBuilder ■类的方法 ・Process.waitFor()方法 ・Process.getErrorStream()方法 ・Process.redirectErrorStream(true)方法: ■可运行代码 ・java…

解读YOLOv8的改进模块

回顾一下YOLOv5 Backbone&#xff1a;CSPDarkNet结构&#xff0c;主要结构思想的体现在C3模块&#xff0c;这里也是梯度分流的主要思想所在的地方&#xff1b;PAN-FPN&#xff1a;双流的FPN&#xff0c;必须香&#xff0c;也必须快&#xff0c;但是量化还是有些需要图优化才可以…

“数据二十条”发布背后:国企下场探路,技术路径日渐清晰

科技云报道原创。 近日&#xff0c;中共中央、国务院对外发布了《关于构建数据基础制度更好发挥数据要素作用的意见》&#xff08;又称“数据二十条”&#xff09;&#xff0c;为数据要素的流通和使用起到了举旗定向的作用&#xff0c;让从业者都感到振奋。 必须承认的是&…

通信原理与MATLAB(十二):MSK的调制解调

目录1.MSK的调制原理2.MSK的解调原理3.MSK代码4.结果图5.特点1.MSK的调制原理 MSK调制原理如下图所示&#xff0c;基带码元先差分编码&#xff0c;然后经过串并转换分成I、Q两路&#xff0c;再与对应的载波相乘&#xff0c;然后再相加完成QAM的调制。 其中注意:I、Q两路码元分…

【深度学习】LSTM预测股票价格

入行深度学习1年多了&#xff0c;该还的还得还&#xff0c;没接触过LSTM的预测项目&#xff0c;这就来活了。 文章目录前言1. 开工1.1 引入必须的库1.2 数据初探1.3 划分数据集1.4 数据归一化1.5 数据分组1.6 搭建模型1.7 训练1.8 测试集总结前言 LSTM是一个处理时序关联的数据…

数据结构-第七期——并查集的应用(Python)

在学习并查集的应用之前&#xff0c;请大家先学习第六期-并查集的入门 ,这样会比较好理解 真题训练1 合根植物2017年第八届决赛&#xff0c;lanqiao0J题号110 【题目描述】 w 星球的一个种植园&#xff0c;被分成 mn 个小格子&#xff08;东西方向 m 行&#xff0c;南北方向…

dubbo-admin安装

一、dubbo-admin安装 1、环境准备 dubbo-admin 是一个前后端分离的项目。前端使用vue&#xff0c;后端使用springboot&#xff0c;安装 dubbo-admin 其实就是部署该项目。我们将dubbo-admin安装到开发环境上。要保证开发环境有jdk&#xff0c;maven&#xff0c;nodejs 安装n…

基于Python的geopandas库处理矢量几何的教程

前言在许多工作中中&#xff0c;我使用 ArcGIS 平台从事过许多与地理空间相关的项目&#xff0c;我非常喜欢这个平台。 这意味着我可以在具有尖端地理空间技术的项目中进行咨询&#xff0c;例如多维栅格、深度学习和空间物联网自动化。 考虑到这一点&#xff0c;我总是试图跟踪…

openstack增加一个计算节点

1.前言 由于资源有限&#xff0c;所以直接在存储节点&#xff08;block&#xff09;部署 由于存储节点最初只设计了一块网卡&#xff0c;所以需要增加一块网卡&#xff0c;名称为eth1&#xff0c;IP&#xff1a;192.168.200.30编辑ifcfg-eth1&#xff0c;然后重启网络systemct…

【优化】windows双网叠加 多网叠加 网速叠加 教程

【优化】windows双网叠加 多网叠加 网速叠加 教程 1 连接两个以上的网络, 网络不能是同一个 例如 网线-A wifi-B 2 控制面板\所有控制面板项\网络连接 最后 确定保存 同理 修改wifi-B的接口活跃点数为 25 并保存 如果没有生效 可以将两个网络连接禁用 再启用 通过命…

4656. 技能升级

4656. 技能升级 https://www.acwing.com/problem/content/4659/ 第十三届蓝桥杯省赛CC组 算法标签&#xff1a;贪心&#xff1b;多路归并&#xff1b;二分 思路 如果暴力来做的话&#xff0c;会将所有数放到一个集合里面排序&#xff0c;取前 mmm 项之和即可&#xff0c;但时…

Vue3——第六章(侦听器:watch、watchEffect)

一、watch 基本使用 在组合式 API 中&#xff0c;我们可以使用 watch 函数在每次响应式状态发生变化时触发回调函数&#xff1a; 二、侦听数据源类型 watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 get…