当前位置: 首页 > article >正文

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

目录

一.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.kler.cn/a/527485.html

相关文章:

  • jEasyUI 创建 CRUD 应用
  • 32. C 语言 安全函数( _s 尾缀)
  • 你了解哪些Java限流算法?
  • 基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)
  • 服务器虚拟化技术详解与实战:架构、部署与优化
  • 网站快速收录:提高页面加载速度的重要性
  • 洛谷 P10288 [GESP样题 八级] 区间 C++ 完整题解(STL二分法)
  • MySQL为什么默认引擎是InnoDB ?
  • 【Leetcode算题记录】枚举技巧(枚举右,维护左)
  • VisionMamba安装
  • Java小白入门教程:三种注释+快捷方式
  • 三傻排序的比较(选择,冒泡,插入)
  • C++——类和对象(下)
  • js基础(黑马)
  • 基于Scrapy采集豆瓣电影Top250的详细数据
  • Java小白入门教程:类?方法?变量?
  • 【LLM-agent】(task1)简单客服和阅卷智能体
  • Hugging Face 推出最小体积多模态模型,浏览器运行成为现实!
  • 学习Python编程,需要哪些编程语言基础?如何开始学习Python?
  • 概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步
  • Python微服务框架Nameko | python 小知识
  • 实现使用K210单片机进行猫脸检测,并在检测到猫脸覆盖屏幕50%以上时执行特定操作
  • Koa 基础篇(二)—— 路由与中间件
  • 事务04之死锁,锁底层和隔离机制原理
  • 【C++语言】卡码网语言基础课系列----4. A+B问题IV
  • 使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践