尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

【C++】008、sizeof与strlen的区别
📅 发布时间:2026/7/4 3:53:14

一、本质区别

  • 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' 之前的字符数,与结构体无关。

相关新闻

  • Kimi K2.5 vs GPT-5.4编程实测:长文本与推理能力硬核对比
  • 永磁同步电机控制技术:从PI到MPC的演进与实践
  • centos python ide 用这工具,效率天差地别,你还在龟速查找?

最新新闻

  • 暗黑破坏神3智能按键助手:三步配置实现游戏效率革命
  • Sakana Fugu模型:多智能体编排系统实战与API调用指南
  • 雷赛DMC3400运动控制卡C#开发实战与架构设计
  • 从CTF实战入门逆向工程:IDA Pro与LLDB拆解XOR加密程序
  • 概率预测实战:从单点估计到不确定性建模
  • 基于YOLO与SpringBoot的葡萄叶片病害智能检测系统开发

日新闻

  • STM32F745VG与MC6470 IMU的高性能姿态控制系统设计
  • 机器不消费,人何以生存
  • AI项目操作手册编写规范与最佳实践

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号