menset的使用方法

menset的使用方法

#include <cstring> // 必须包含这个头文件! memset(目标内存地址, 填充值, 填充的字节数);

填充值只能是「单字节值」

memset是按字节填充,所以:

  • ✅ 填充0:完全没问题(所有类型数组清空都能用);
  • ❌ 填充1:不要这么做!比如int占 4 字节,填充1会变成0x01010101(十进制 16843009),不是你想要的1
  • 总结:memset几乎只用来填充0(清空)或-1(特殊场景),其他值慎用。

为什么只能0和-1呢

核心原因是0 和 1 在二进制中的表示形式不同,加上memset是「按字节填充」,导致填充 0 时所有类型都能得到预期结果,填充 1 时只有单字节类型(如char)符合预期,多字节类型(如int)会出错。我用通俗的方式拆解这个逻辑:

一、先搞懂两个基础概念

1. 字节与多字节类型的存储

计算机中:

  • 1 个字节 = 8 位二进制(00000000 ~ 11111111);
  • char类型占 1 字节,int类型通常占 4 字节(不同编译器可能是 2/8 字节,以 4 字节为例);
  • 多字节类型(如int)的存储是「多个字节拼接」,比如int a = 1,在内存中存储为:

    plaintext

    字节1(低地址) | 字节2 | 字节3 | 字节4(高地址) 00000001 | 00000000 | 00000000 | 00000000
    (小端存储,绝大多数系统的默认方式)
2. memset 的填充规则

memset不关心数组的类型,只把目标内存拆成「一个个独立的字节」,每个字节都填充成你指定的值,比如:

  • 填充值是0→ 每个字节都变成00000000
  • 填充值是1→ 每个字节都变成00000001

二、为什么填充 0 没问题?

int类型为例(4 字节),memset给每个字节填0

plaintext

字节1 | 字节2 | 字节3 | 字节4 00000000 | 00000000 | 00000000 | 00000000

拼接后整个int的值就是0(十进制),完全符合 “清空数组为 0” 的预期。

不管是char(1 字节)、int(4 字节)、long long(8 字节),填充 0 时每个字节都是 0,拼接后整体值就是 0 → 所以所有类型数组清空都能用memset填 0。

三、为什么填充 1 会出错?

还是以int类型(4 字节)为例,memset给每个字节填1(二进制00000001):

plaintext

字节1 | 字节2 | 字节3 | 字节4 00000001 | 00000001 | 00000001 | 00000001

把这 4 个字节拼接成int值:

  • 二进制:00000001 00000001 00000001 00000001
  • 十六进制:0x01010101
  • 十进制:1*2^24 + 1*2^16 + 1*2^8 + 1 = 16843009

这显然不是你想要的1!只有char类型(1 字节)填充 1 时,结果才是1(因为只有 1 个字节,没有拼接问题)。

四、为什么 - 1 是特例(可以填充)?

这是因为-1在二进制中是「全 1」(补码存储规则):

  • 1 字节的-111111111
  • 4 字节的-111111111 11111111 11111111 11111111

memset填充-1时,每个字节都变成11111111,拼接后不管是 1 字节 / 4 字节 / 8 字节类型,整体值都是-1→ 所以填充-1也是符合预期的。

五、总结(核心要点)

填充值单字节类型(char)多字节类型(int/long long)能否用 memset 填充
0结果为 0(正确)结果为 0(正确)✅ 可以
1结果为 1(正确)结果为 0x01010101(错误)❌ 不可以
-1结果为 - 1(正确)结果为 - 1(正确)✅ 可以

简单记:memset只适合填充「所有字节都相同」的值,只有0-1满足这个条件(0 是全 0,-1 是全 1),其他值(如 1、2、100)的多字节拼接结果都不符合预期。

对你的代码场景来说,只需要用memset填 0 清空数组就够了,这也是memset最常用、最安全的用法~

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

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

相关文章

“AUTOSAR?我连CAN都看不懂…” 一个汽车电子工程师的坦白与指南

我刚入职现时&#xff0c;导师指着电脑上复杂的网络拓扑图说&#xff1a;“这个ECU的AUTOSAR架构需要优化。” 我表面点头&#xff0c;手心却在冒汗——获取车软嵌入式&#xff0c;欢迎可&#xff1a;AutoButo。那些分层框图像天书&#xff0c;MCAL、BSW、RTE这些缩写&#xff…

大数据领域数据中台的安全审计与合规

大数据领域数据中台的安全审计与合规 关键词:大数据、数据中台、安全审计、合规、数据安全 摘要:本文聚焦于大数据领域数据中台的安全审计与合规问题。随着大数据技术的迅猛发展,数据中台成为企业整合和管理数据的重要平台。然而,其安全与合规性面临诸多挑战。文章首先介绍…

数据结构01——时间复杂度和空间复杂度

一.什么是数据结构数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据集合。不存在一种通用的数据结构针对于所有应用场景&#xff0c;所以产生了多种多样的数据结构来适配不同的环境&#xff1a;例如顺序表、链表、堆栈…

Java中strip与trim()的区别

TOC Java中strip与trim()的区别 jdk11及以上版本&#xff0c;java的String支持strip()方法&#xff0c;那么原来的删除空白trim()与strip()的区别时什么&#xff1f; 区别 trim()&#xff1a;仅处理字符串首尾的ASCII空白字符串&#xff08;小于等于\u0020字符&#xff0c;…

Python入门——字符串

Python快速入门&#xff08;1&#xff09;——字符串字符串索引访问常用倒序访问截取/切片常用方法长度判空大小写删除空白分割最近需要使用到python&#xff0c;本系列适合有其他编程语言&#xff08;C/C/Java&#xff09;基础的同学&#xff0c;帮助大家一起快速上手Python&a…

多级缓存必要性

Java多级缓存设计&#xff1a;应对微博明星官宣的高并发场景 一、多级缓存原理与必要性 1.1 为什么需要多级缓存&#xff1f; 单级缓存的问题&#xff1a; 性能瓶颈&#xff1a;所有请求都打到同一缓存层&#xff0c;压力集中容错性差&#xff1a;缓存层故障直接影响整体可…

OpenHarmony Flutter 分布式安全防护:跨设备身份认证与数据加密传输方案 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

tp3.2性能暂时优化调整

// 1. 禁用TP3.2的冗余组件(在入口文件index.php最顶部添加)define(APP_DEBUG, false); // 关闭调试模式(必须)define(BIND_MODULE,Api); // 绑定模块,减少模块扫描define(THINK_PATH, __DIR__./ThinkPHP/);// 禁…

百万数据报表操作 - 努力-

百万数据报表操作百万数据报表操作,Excel报表一、百万数据报表概述 1.1 百万数据报表概述 我们都知道Excel可以分为早期的Excel2003版本(使用POI的HSSF对象操作)和Excel2007版本(使用POI的XSSF操作),两者对百万数…

电商系统-下单功能 - 努力-

电商系统-下单功能电商系统-下单功能,SpringCloud一、 订单结算页 本文介绍:订单结算页,用户地址列表,支付方式选择,用户商品清单,生成订单 ,分布式ID,库存扣减,增加用户积分业务功能。 1.1 订单结算页 用户收货…

软件测试—即时通讯测试方法

一、即时通讯实现方式 1.短轮询&#xff08;Short Polling&#xff09; 短轮询是一种客户端定期向服务器发送HTTP请求以检查是否有新数据的简单技术。无论服务器是否有新数据&#xff0c;客户端都会在固定的时间间隔后再次请求。 实现机制 客户端向服务器发送HTTP请求&#xff…

告别if-else噩梦:流程编排技术

作为一个优秀的程序员&#xff0c;要守住职业的底线。能简单快速的完成的一件事&#xff0c;就一定要用简单的方案快速完成。不可过度的设计&#xff0c;始终保持系统的简洁&#xff01; 曾几何时&#xff0c;我对于流程编排这件事 嗤之以鼻&#xff0c;为什么呢&#xff1f;我…

attn_scores注意力分计算-记录

querys 是 2*6*2&#xff0c;keys也是2*6*2 attn_scores querys keys.transpose(1,2)attn_scores 最终维度是 266&#xff1b;数值上是两个矩阵的批量矩阵乘法结果&#xff0c;每个样本对应一个 66 的注意力分数矩阵 transpose(1,2) 交换 keys 的第 1 维和第 2 维&#xff1…

多头注意力中的张量重塑

view PyTorch 的view() 是张量「重塑&#xff08;Reshape&#xff09;」函数&#xff0c;用于改变张量的维度形状但不改变数据本身 在多头注意力中&#xff0c;view()的核心作用是将总隐藏维度拆分为「注意力头数 单头维度」&#xff0c;实现多头并行计算 核心规则 tensor.vie…

第二周作业wp

第二周作业wp [SWPUCTF 2021 新生赛]easyupload3.0 题目提示已经很明显了&#xff0c;我们要提交一个.jpg的文件。那么我们就把一个木马文件做成jpg文件。 这里我们把文件成功上传&#xff0c;然后通过蚁剑连接 连接之后&#xff0c;寻找flag。 如图&#xff0c;成功找到。 2…

吐血推荐专科生必用TOP9AI论文网站

吐血推荐专科生必用TOP9AI论文网站 2026年专科生论文写作工具测评&#xff1a;为何需要一份精准榜单&#xff1f; 随着AI技术在教育领域的深入应用&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上五花八门的论文辅助平台&#xff0c;…

Python 调用大模型(LLM) - 努力-

Python 调用大模型(LLM)Python 调用大模型(LLM),提示词工程一、提示词工程 提示词(Prompt):是引导大模型(LLM)进行内容生成的命令(一句话、一个问题等)。 提示词工程(Prompt Enginnering):通过有技巧的编写提示…

Python核心语法-Python自定义模块、Python包 - 努力-

Python核心语法-Python自定义模块、Python包Python核心语法,Python自定义模块、Python包一、python 模块 Python模块(module):一个Python文件(.py)就是一个模块,模块是Python程序的基本组织单位。在模块中可以定义…

亲测好用9个一键生成论文工具,助本科生轻松写论文!

亲测好用9个一键生成论文工具&#xff0c;助本科生轻松写论文&#xff01; AI 工具的崛起&#xff0c;让论文写作不再难 对于本科生来说&#xff0c;写论文一直是令人头疼的事情。从选题、查资料到撰写和降重&#xff0c;每一个环节都可能成为“卡壳”的点。而随着 AI 技术的不…

为什么您的机房必须选择本地化 U 位资产管理系统?供应商服务深度解析

机房 U 位资产管理是数据中心运营的核心环节&#xff0c;传统云端管理模式在实时性、数据安全与服务响应上的短板&#xff0c;进一步放大了空间利用率低、资产跟踪难、安全合规难三大痛点&#xff0c;成为机房高效运营的阻碍。本地化 U 位资产管理系统依托数据本地存储、实时交…