strlen与sizeof终极对比指南:嵌入式开发必知的字符串处理误区
在嵌入式开发中,字符串处理是最基础却最容易出错的环节之一。特别是当开发者混淆strlen与sizeof这两个看似相似实则完全不同的操作时,往往会导致内存越界、数据截断甚至系统崩溃等严重问题。本文将深入剖析两者的本质差异,并通过实际案例展示在RTOS环境、结构体对齐、ROM字符串处理等典型场景下的正确用法。
1. 本质区别:编译时与运行时的较量
sizeof是C语言中的一个运算符,而strlen是标准库提供的函数。这一根本差异决定了它们的行为模式完全不同。
char str[] = "embedded";
printf("sizeof: %zu\n", sizeof(str)); // 输出9(包含'\0')
printf("strlen: %zu\n", strlen(str)); // 输出8
关键差异对比表:
| 特性 | sizeof | strlen |
|---|---|---|
| 计算时机 | 编译时确定 | 运行时计算 |
| 包含'\0' | 是 | 否 |
| 参数类型 | 任何类型(变量/类型名) | 必须以'\0'结尾的字符串 |
| 性能 | 零开销 | O(n)时间复杂度 |
| 数组退化 | 保留完整数组信息 | 退化为指针 |


784

被折叠的 条评论
为什么被折叠?



