news 2026/7/4 3:48:34

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【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' 之前的字符数,与结构体无关。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 3:47:41

总线舵机技术解析与应用实践

1. 总线舵机技术概述总线舵机作为智能机器人关节的核心执行部件,正在逐步取代传统PWM舵机。飞特智能(Feetech)推出的STS/SMS/SCS/HL四大系列总线舵机,通过统一的TTL/RS485总线协议实现多设备级联控制,单总线可控制多达…

作者头像 李华
网站建设 2026/7/4 3:45:08

热成像车辆行人数据集 目标检测数据集

热成像目标检测数据集 V2 版本项目背景 热成像技术因其在安防监控、夜间巡逻、消防救援等领域的独特优势而受到重视。本数据集旨在提供高质量的热成像图像及其对应的可见光图像,支持热成像目标检测的研究与应用。 数据集概述 名称:热成像目标检测数据集 …

作者头像 李华
网站建设 2026/7/4 3:44:39

AI大模型实战选型指南:ChatGPT、Gemini、Claude、Grok工作流适配策略

1. 这不是“选美比赛”,而是四款AI大模型的实战能力图谱最近总有人问我:“ChatGPT、Gemini、Claude、Grok,这四个到底哪个最好?”——这个问题本身就有陷阱。就像问“奔驰、特斯拉、丰田、保时捷哪台车最好”一样,不带…

作者头像 李华
网站建设 2026/7/4 3:42:51

百度抓取诊断:你的网站侦察兵

百度站长的“抓取诊断”工具,它模拟百度蜘蛛发起一次抓取,对诊断问题非常有帮助,但本身不直接促成大量收录。 它的核心作用是帮你定位问题,而不是直接为你的网站带来流量或收录。可以把它理解成“侦察兵”,而不是“工…

作者头像 李华
网站建设 2026/7/4 3:41:23

UVa 479 Irrigation Flow Rates

题目描述 Mishawaka\texttt{Mishawaka}Mishawaka 灌溉公司设计定制管道灌溉系统。系统由若干水井(水源)、若干阀门(可控分流器)和若干喷头(终端)组成,水流仅沿有向边方向流动。每个阀门有一个左…

作者头像 李华