当前位置: 首页 > 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.cnnetsun.cn/news/3126766.html

相关文章:

  • 总线舵机技术解析与应用实践
  • 热成像车辆行人数据集 目标检测数据集
  • AI大模型实战选型指南:ChatGPT、Gemini、Claude、Grok工作流适配策略
  • 【EIS芯片应用专题之二】SENSIPLUS DCMU深度解读:面向锂离子电池的紧凑低功耗ASIC芯片在线高分辨率EIS
  • 百度抓取诊断:你的网站侦察兵
  • UVa 479 Irrigation Flow Rates
  • HoRain云--C++多线程编程
  • 《唤醒你的AI同事:WorkBuddy从零上手》035:工作流程优化
  • 长文档总结不卡顿,128k 上下文在 Strix Halo 上的表现
  • Gemini 1.5与GPT-4o真实对比:大模型选型的技术逻辑与落地实践
  • 垃圾短信识别项目深度复盘:中文文本分类全流程实战 + 3 个数据泄漏避坑指南
  • AI赋能非技术行业实战:我用DeepSeek+混元整理了2026河北高考志愿填报完整指南
  • DeepSeek 开源 DSpark,一个可将 LLM 推理速度提升高达 85% 的新框架
  • 【ROS】 ros学习日记(1)
  • swagger增强knife4j
  • C++:拷贝构造函数
  • 椭圆曲线 Diffie-Hellman 密钥交换解题思路
  • 集团知识管理平台建设方案:74页PpT爆款干货全解析!
  • 【2026万字实录】从理论到实战:网络信息安全全景深度解析与避坑指南
  • 后 Django 时代:SQLAlchemy 2.0、Tortoise 与 Piccolo 三大异步 ORM 选型指南
  • 几分钟完成 OpenClaw 安装,Windows 可视化步骤新手直接照搬
  • 手撕字符串算法:反转、回文、验证回文 Ⅱ 完整拆解
  • 带标注的骑电动车是否佩戴头盔数据集,识别率77.1%,1345张图,支持yolo,coco json,voc xml,文末有模型训练代码
  • 3个核心功能解决你的Windows日志分析困境:为什么LogExpert能成为开发运维的终极利器?
  • DellFanManagement:戴尔笔记本终极风扇控制解决方案,告别噪音与过热烦恼!
  • 预约留资小程序制作工具测评:餐宝盈/BBWEYY/比文云/Landingi/Webnode(2026年7月更新)含零代码SAAS、AI编程、源码定制交付
  • GPT-4o与文心一言4.5:当前主流大模型真实进展解析
  • 芯原推出CPP2000摄像头后处理IP,赋能具身机器人和移动视觉应用
  • 云系列和Terraform(十二)
  • WidescreenFixesPack:让70+款经典游戏在现代宽屏显示器上完美运行的终极方案