尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
strlen和sizeof的区别
strlen和sizeof的区别1. 本质不同编译期 vs 运行期· sizeof是运算符操作符不是函数。它在编译阶段就由编译器计算出结果除了C99的可变长数组VLA。· strlen是库函数定义在 string.h 中。它必须在程序运行阶段才能计算出结果。2. 计算范围不同最核心含结束符 vs 不含· sizeof计算的是占用内存的总字节数。如果数组定义了大小它算总容量如果数组用字符串初始化它包含末尾的隐藏 \0。· strlen计算的是字符串有效长度它从起始地址开始数直到遇到第一个 \0 就停止不包含 \0。 基础示例数组情况#include stdio.h #include string.h int main() { char arr[] hello; // 实际内存: h e l l o \0 (共6字节) printf(%zu\n, sizeof(arr)); // 输出 6 (计算整个数组占用的字节数包含\0) printf(%zu\n, strlen(arr)); // 输出 5 (只数有效字符遇到\0停下) return 0; }3. 指针陷阱面试必考这正是文章中重点标注的“容易踩坑”点。当把数组名传给指针后sizeof只认指针变量本身的大小而strlen依然顺着地址去找\0。 指针示例#include stdio.h #include string.h int main() { char arr[] hello; char *p arr; // p指向数组首地址 // 64位系统下指针变量p本身占 8 个字节存地址与指向的内容无关 printf(%zu\n, sizeof(p)); // 输出 8 (32位系统输出4) // strlen从p指向的地址开始数直到遇见\0依然是5 printf(%zu\n, strlen(p)); // 输出 5 return 0; }4. 适用范围与类型提升· sizeof万能。可以用于任何类型int、double、结构体、指针甚至可以用于表达式而不执行表达式只看表达式的最终类型。· strlen专用。只能用于以 \0 结尾的字符数组/指针如果传入没有结束符的字符数组会越界导致结果随机。 类型提升示例对应你文章中的 a 3.14int a 10; // sizeof不会真的去运算a3.14它只推导出结果的类型是double所以返回8 printf(%zu\n, sizeof(a 3.14)); // 输出 8 (double占8字节)---一图胜千言速记表对比项sizeofstrlen本质运算符编译时计算函数运行时调用头文件不需要关键字需要#include string.h计数依据看数据类型和编译器分配看内存中从起始位置到第一个\0是否包含\0包含针对字符串数组初始化不包含参数类型任意类型、变量、表达式必须是char *字符指针返回值size_t无符号整型size_t无符号整型打印提醒两者返回值都是 size_t无符号数打印时建议使用 %zu不要用 %d否则可能出现无符号数转有符号数导致打印异常如超大数字的问题。
RELATED

相关推荐

基于SpringBoot+vue的减脂训练营管理系统源码+文档+讲解视频

基于SpringBoot+vue的减脂训练营管理系统源码+文档+讲解视频

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

📅 2026/9/11 17:30:23
Excel公式实战:40个提升数据分析效率的核心技巧

Excel公式实战:40个提升数据分析效率的核心技巧

1. 为什么Excel公式是数据分析的基石 在数据处理领域,Excel公式就像厨师的刀具套装——看似基础却决定了工作效率的上限。我见过太多数据分析师因为公式掌握不扎实,把半小时能完成的工作硬生生拖成一整天。这40个公式的筛选标准很明确:必须是…

📅 2026/9/11 17:30:23
企业AI服务化中的API设计挑战与最佳实践

企业AI服务化中的API设计挑战与最佳实践

1. 企业AI创新中的API设计挑战在数字化转型浪潮中,企业AI能力建设已经从"要不要做"转变为"如何高效落地"。作为某金融科技公司的AI应用架构师,我亲历了三个不同行业的AI服务化项目,发现API设计质量直接决定了AI能力的复用…

📅 2026/9/11 17:30:23
MORE NEWS

更多资讯

📰

Maestro:YAML 驱动的移动端 UI 自动化测试——一条登录回归不用写任何代码框架

Maestro:YAML 驱动的移动端 UI 自动化测试——一条登录回归不用写任何代码框架 【免费下载链接】Maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro 你刚改完登录页的按钮交互,想确…

📰

分层记忆结构:工作记忆、情景记忆与语义记忆的协同

分层记忆结构:工作记忆、情景记忆与语义记忆的协同 在构建拟人化、具备长期伴随与复杂问题解决能力的自主智能体(Autonomous Agent)时,许多开发者在设计记忆机制时,往往把所有记忆混杂在一个单体向量数据库中&#xff…

📰

Maestro 多语言测试完全指南:3 步搭好跨语言本地化验证流程

Maestro 多语言测试完全指南:3 步搭好跨语言本地化验证流程 【免费下载链接】Maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro Maestro 是一款面向移动端的端到端自动化测试工具,…

📰

windows 驱动实例分析系列: HidHide驱动分析-HidHideCLI 篇(一)

HidHide 驱动分析 - HidHideCLI 篇(一):整体架构与命令解释器 一、项目定位与设计目标 HidHideCLI.exe 是 HidHide 解决方案的命令行接口(CLI)组件,面向高级用户、系统管理员以及自动化部署场景。与图形化的…

📰

提示词回归测试流水线:基于 GitHub Actions 的自动化质量门禁

提示词回归测试流水线:基于 GitHub Actions 的自动化质量门禁在传统的现代软件工程中,任何一段核心业务代码在合并进主干分支(Main Branch)前,都必须强制通过 CI/CD 流水线中严格的单元测试(Unit Tests&…

📰

app_paths.py 与 utils 工具层:双路径解析·打包兼容·服务注册表·工具封装·安全白名单·call_service 权限拦截|信息化项目全流程管理系统源码逐行精讲(四十九)

app_paths.py 与 utils 工具层:双路径解析PyInstaller 打包兼容meta_service 服务注册表meta_utils LangChain 工具封装READONLY_SERVICE_WHITELIST 安全白名单call_service 权限拦截|信息化项目全流程管理系统源码逐行精讲(四十九) 摘要:本文深入解析信息化项目全流程管理…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬