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

【C++】008、sizeof与strlen的区别

一、本质区别

  • sizeof是C++操作运算符,在编译期计算内存字节数

  • strlen是C标准库的函数,在运行期通过遍历直到遇到'\0'来计算字符串的长度

二、五大核心区别

对比

sizeof

strlen

本质

运算符(sizeof(int))

函数库(csting、string.h)

计算时机

编译器

运行时(需要遍历内存)

计算内容

计算类型或变量占用的内存字节数(包含\0)

参数必须是const char*, 以\0结尾的字符指针

数组名行为

返回整个数组占用的字节数

当传入的数组名退化为指针,返回指针指向的字符串长度(以\0结尾)

空值/空类型

对void*,报语法错误

传入nullptr是未定义行为,程序崩溃

三、数组作为参数退化为指针

  • sizeof获取的就不是原始数组内容的大小了

  • 代码示例

char str[] = "Hello"; // 数组,占用6字节('H','e','l','l','o','\0') char* p = str; // 指针,指向数组首地址 // 关键对比: sizeof(str); // ✅ 结果 = 6 (编译期计算整个数组大小,包含 '\0') strlen(str); // ✅ 结果 = 5 (运行期遍历,遇到 '\0' 停止,不计数 '\0') sizeof(p); // ✅ 结果 = 8 (64位系统)或 4(32位系统),指针本身的大小 strlen(p); // ✅ 结果 = 5 (p 指向字符串首地址,遍历得到长度) // ⚠️ 终极陷阱:当数组作为函数参数传递时! void func(char arr[]) { // 注意:这里的 arr 表面上写的是数组,但编译器会将它调整为指针! sizeof(arr); // ❌ 结果 = 8(指针大小),而不是数组大小! strlen(arr); // ✅ 结果 = 字符串长度(因为 arr 退化为指针,但所指内容还在) }

四、结构体/类中sizeof与内存对齐

  • sizeof计算的是对象的内存占用,包括内存对齐(Padding)

struct A { char a; int b; }; // 在 64位系统上:char(1) + 填充(3) + int(4) = 8 字节 // 而不是 1 + 4 = 5 字节。 struct B { int b; char a; }; // 同样的两个成员,顺序不同:int(4) + char(1) + 填充(3) = 8 字节(也是8,但布局不同) // strlen 完全不关心内存对齐,它只数 '\0' 之前的字符数,与结构体无关。
http://www.jsqmd.com/news/1119292/

相关文章:

  • 无刷电机控制系统架构与优化实践
  • Kimi K2.5 vs GPT-5.4编程实测:长文本与推理能力硬核对比
  • 如何快速打造个性化桌面:Ark-Pets开源桌宠完整指南
  • 人工智能赋能新型工业化实施路径方法论
  • 永磁同步电机控制技术:从PI到MPC的演进与实践
  • 【共创季稿事节】鸿蒙原生 ArkTS 布局方式之 Stack 实现渐变背景与文字对比度提升
  • 2026 AI外呼公司:6家产品路线对比
  • centos python ide 用这工具,效率天差地别,你还在龟速查找?
  • PP-OCRv6 来了,C# 离线 OCR OnnxOCRSharp再升级
  • AI赋能非技术行业实战:我用DeepSeek+混元整理了2026河北高考志愿填报完整指南
  • 成都月映长滩四层老旧别墅电梯落地:天井改造加装封闭式曳引电梯
  • PyTorch实现猫狗分类器:从数据到部署的完整指南
  • 警惕AI技术谣言:GPT-5并不存在,理性看待大模型演进
  • Python 3个实现屏幕截图工具的方法
  • 聊聊Google Play上架:新号需要走的12人连测14天该怎么操作
  • 27届二本!简历主项目烂大街,立刻放弃主攻开发岗
  • Claude Code 记忆系统的边界感,CLAUDE.md 和 auto memory 怎样分工
  • 【监控与可观测性】03-ELK日志体系搭建:从采集到告警的完整闭环
  • 【Camera】Monocular vs Stereo Calibration
  • 【TwinCAT3实战教程】项目交付前的最后一步:六大核心配置与避坑指南
  • Dell笔记本散热控制终极指南:3步实现专业级风扇管理
  • 智驾人才跨界具身智能:是降维打击还是水土不服?深度技术复盘与工程落地
  • Linux TCP网络编程深度精讲,三次握手、四次挥手、TCP状态流转、粘包拆包、套接字参数、全套服务端客户端实战与工程解决方案
  • Prompt Engineering进阶指南:从提示词工程到AI Agent工作流编排
  • 7自由度开源机械臂OpenArm 2.0:从实验室到生产环境的完整实战指南
  • Codex 卡在 Reconnecting 5/5?手把手带您排查修复
  • 电子合同选型7大盲区,企业必看避坑指南
  • 【中小学AI人工智能教育】声音分类——提琴分类:快速定义项目类型实例
  • 2FA 方案的认证架构对比:本地存储、云同步、端到端加密
  • 2026年第三方物流服务商横向对比:专业3PL与普通物流公司的五大差异——上海心泾国际物流 vs 市场主流服务商