news 2026/3/24 2:02:44

menset的使用方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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最常用、最安全的用法~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 10:27:09

亲测好用!8个AI论文平台测评,研究生毕业论文必备

亲测好用&#xff01;8个AI论文平台测评&#xff0c;研究生毕业论文必备 2026年AI论文平台测评&#xff1a;从功能到体验的深度解析 随着人工智能技术在学术领域的广泛应用&#xff0c;越来越多的研究生开始依赖AI工具来提升论文写作效率。然而&#xff0c;面对市场上五花八门的…

作者头像 李华
网站建设 2026/3/17 12:36:20

循环经济在不同行业的应用前景比较

循环经济在不同行业的应用前景比较 关键词:循环经济、行业应用、应用前景、可持续发展、资源利用 摘要:本文旨在深入探讨循环经济在不同行业的应用前景并进行比较。首先介绍了循环经济的背景知识,包括其目的、适用读者、文档结构和相关术语。接着阐述了循环经济的核心概念、…

作者头像 李华
网站建设 2026/3/15 18:49:12

STM32F0实战:基于HAL库开发【2.1】

7.4.2 从待机模式唤醒 待机模式允许达到能耗最低,它基于Cortex-M0深度睡眠模式,电压调节器禁用,1.8V域关闭,PLL、HIS和HSE振荡器也关闭,SRAM和寄存器内容丢失。只有RTC寄存器、RTC备份寄存器和备用电路保持工作。可以使用HAL库中的HAL_PWR_EnterSTANDBYMode()函数进入待机…

作者头像 李华
网站建设 2026/3/21 11:12:07

动态系统思维:告别僵化内耗的破局指南

职场中总有这样的困惑&#xff1a;公司制定了标准化流程&#xff0c;却越执行越低效&#xff1b;团队追求“绝对有序”&#xff0c;反而失去创新活力&#xff1b;个人埋头重复固有工作&#xff0c;却在变化中逐渐被淘汰。我们总以为“稳定有序”是生存之道&#xff0c;却忽略了…

作者头像 李华
网站建设 2026/3/15 16:59:14

什么病毒会导致人全身没力气、胃口不好,还有拉肚子?

多种病毒感染都可能引发全身乏力、食欲不振、腹泻的症状,其中最常见的是诺如病毒和轮状病毒,此外新冠病毒、腺病毒等也可能出现这类表现。 🦠 常见相关病毒及特点 1. 诺如病毒 • 典型症状:突发腹泻、呕吐,伴随全身乏力、食欲减退,还可能有腹痛、低热 • 传播性强:可…

作者头像 李华
网站建设 2026/3/15 7:13:01

如何系统化的学习金融,投资,理财?

系统化学习金融、投资、理财&#xff0c;需要遵循 “搭建知识框架→夯实理论基础→实践验证迭代→优化思维体系” 的逻辑路径&#xff0c;三者环环相扣&#xff0c;缺一不可。以下是分阶段的详细学习方案&#xff0c;兼顾理论深度与实操性&#xff1a;一、 第一阶段&#xff1a…

作者头像 李华