C++ memset设置数组内容和memcpy拷贝数组内容的介绍与使用

server/2025/2/2 8:49:47/

目录

一.memset使用

设置数组内容:

错误使用:

二.memcpy拷贝数组内容


一.memset使用

        函数原型如下:

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

        参数解释: ptr -- 指针:指向了要设置的内存块的起始位置

        value -- 要设置的值

        num -- 设置的字节个数

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

设置数组内容:

#include <iostream>
#include <cstring>
using namespace std;
int main ()
{char str[] = "hello world";memset(str, 'x', 6);cout << str << endl;int arr[] = {1,2,3,4,5};memset(arr, 0, sizeof(arr));//这⾥数组的⼤⼩也可以⾃⼰计算 for(auto i : arr){cout << i << " ";}cout << endl;return 0;
}

输出结果:

错误使用:

#include <iostream>
using namespace std;
int main ()
{int arr[] = {1,2,3,4,5};memset(arr, 1, 4 * sizeof(int));for(auto e : arr){cout << e << " ";}cout << endl;return 0;
}

注意memsert是以字节为单位就行设置的。

从上⾯打印结果可以看出,当value设置为1或者其他⾮0的数字时,打印结果不符合预期。 主要原因是 memset 函数是给每个字节设置 value 值,⽽⼀个整型元素占⽤4个字节,⼀个整型的 每个字节都被设置为1,⼆进制就是: 00000001000000010000000100000001 ,转换成⼗进制 就是: 16843009 ,因此结果是不符合预期的。如下图所⽰:

二.memcpy拷贝数组内容

在使⽤数组的时候,有时候我们需要将数组a的内容给数组b,⽐如:

int a[10] = {1,2,3,4,5,6,7,8,9,10};

   int b[10] = {0};

C++中有⼀个库函数 memcpy 可以做数组内容的拷⻉,当然 memcpy 其实是⽤来做内存块的拷⻉ 的,当然⽤来做数组内容的拷⻉也是没问题的。memcpy需要的头⽂件是 <cstring>

 函数原型如下:

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

//destination -- ⽬标空间的起始地址

//source -- 源数据空间的起始地址

//num -- 拷⻉的数据的字节个数

代码举例:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{int a[10] = {1,2,3,4,5,6,7,8,9,10};int b[10] = {0};memcpy(b, a, 10 * sizeof(int));for(int e: b){cout << e << " ";}return 0;
}

当然如果拷⻉ double 类型的数组时,计算时应该使⽤ sizeof(double) ,要灵活变化。


http://www.ppmy.cn/server/164286.html

相关文章

HarmonyOS:状态管理最佳实践

一、概述 在声明式UI编程范式中&#xff0c;UI是应用程序状态的函数&#xff0c;应用程序状态的修改会更新相应的UI界面。ArkUI采用了MVVM模式&#xff0c;其中ViewModel将数据与视图绑定在一起&#xff0c;更新数据的时候直接更新视图。如下图所示&#xff1a; ArkUI的MVVM模式…

网络工程师 (8)存储管理

一、页式存储基本原理 &#xff08;一&#xff09;内存划分 页式存储首先将内存物理空间划分成大小相等的存储块&#xff0c;这些块通常被称为“页帧”或“物理页”。每个页帧的大小是固定的&#xff0c;例如常见的页帧大小有4KB、8KB等&#xff0c;这个大小由操作系统决定。同…

Day31-【AI思考】-深度学习方法论全解析——科学提升学习效率的终极指南

文章目录 深度学习方法论全解析——科学提升学习效率的终极指南**一、影子跟读法&#xff08;Shadowing&#xff09;——听力突破核武器****二、番茄工作法&#xff08;Pomodoro&#xff09;——时间管理手术刀****三、费曼技巧&#xff08;Feynman Technique&#xff09;——知…

堆的模拟实现(详解)c++

根据前两篇文章&#xff08;向上调整算法以及向下调整算法&#xff09;&#xff0c;堆的实现就变得巨简单了。 1 创建 创建⼀个⾜够⼤的数组充当堆&#xff1b; 创建⼀个变量 n&#xff0c;⽤来标记堆中元素的个数 const int N 1e6 10; int n; int heap[N]; 2 插⼊ 把新…

如何编写地信测绘信息相关的综述论文-总结版本

A. Hamissi, A. Dhraief, and L. Sliman, “A Comprehensive Survey on Conflict Detection and Resolution in Unmanned Aircraft System Traffic Management,” IEEE TRANSACTIONS ON INTELLIGENT TRANSPORTATION SYSTEMS, 2024 DEC 10, 2024. 摘要 痛点&#xff1a;Severa…

蓝桥杯python语言基础(1)——编程基础

目录 一、python开发环境 二、python输入输出 &#xff08;1&#xff09;print输出函数 print(*object&#xff0c;sep,end\n,......) &#xff08;2&#xff09;input输入函数 input([prompt]), 输入的变量均为str字符串类型&#xff01; input()会读入一整行的信息 ​编…

50. 正点原子官方系统镜像烧写实验

一、Windows下使用OTG烧写系统 1、在Windos使用NXP提供的mfgtool来向开发烧写系统。需要用先将开发板的USB_OTG接口连接到电脑上。 Mfgtool工具是向板子先下载一个Linux系统&#xff0c;然后通过这个系统来完成烧写工作。 切记&#xff01;使用OTG烧写的时候要先把SD卡拔出来&…

http跳转https

1、第一种&#xff1a;不好使 在nginx的配置中&#xff0c;在https的server站点添加如下头部&#xff1a; add_header Strict-Transport-Security “max-age63072000; includeSubdomains; preload”; 这样当第一次以https方式访问我的网站&#xff0c;nginx则会告知客户端的浏览…