欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > strlen 与 sizeof的区别

strlen 与 sizeof的区别

2025/5/10 23:24:09 来源:https://blog.csdn.net/m0_56508437/article/details/146983379  浏览:    关键词:strlen 与 sizeof的区别

1. 本质与用途

  • strlen ✂️

    • 本质:标准库函数(定义在 <string.h>)。

    • 作用:计算字符串的实际长度(直到 \0,不包含它本身)。

    • 示例

      char str[] = "hello";
      printf("%zu", strlen(str)); // 输出 5
      
  • sizeof 📦

    • 本质编译期运算符,不是函数。

    • 作用:获取变量或类型占用的总内存字节数(包括 \0、padding 等)。

    • 示例

      char str[] = "hello";
      printf("%zu", sizeof(str)); // 输出 6(含 \0)
      

2. 核心区别对比

特性strlen ✂️sizeof 📦
作用对象仅适用于 C 字符串适用于所有变量、类型、表达式
计算时机运行时 依赖字符串内容编译时 直接计算内存大小
结果含义字符数(不含 \0总占用字节(含 \0、类型结构)
依赖条件必须以 \0 结尾,否则行为未定义与是否是字符串无关,类型决定结果

3. 场景对比示例

✅ 示例 1:字符数组
char str[] = "hello";
strlen(str);   // → 5
sizeof(str);   // → 6(包含 \0)
✅ 示例 2:指针变量
char *str = "hello";
strlen(str);   // → 5
sizeof(str);   // → 8(64位系统下指针大小)
✅ 示例 3:部分初始化
char str[10] = {'a', 'b', 'c'};
strlen(str);   // → 3(遇到第一个 \0 停止)
sizeof(str);   // → 10(数组大小)
✅ 示例 4:非字符串数据
int arr[] = {1, 2, 3};
sizeof(arr);   // → 12(3 * 4字节)
strlen(arr);   // ❌ 错误!不是字符串!

4. 常见误区警告

  • ⚠️ sizeof 当成字符串长度函数

    char *str = "hello";
    sizeof(str); // 是指针大小,不是字符串长度!
    
  • ⚠️ 数组 vs 指针混用

    char str[10];
    sizeof(str); // → 10(数组)
    char *p = str;
    sizeof(p);   // → 8(指针)
    
  • ⚠️ 未加 \0 尾的字符串会让 strlen 越界

    char str[3] = {'a', 'b', 'c'};
    strlen(str); // ❌ 未定义行为!没有 \0 结束!
    

5. 小结口诀

strlen  看内容,遇 '\0' 停;
sizeof  看类型,静态分明。
  • ✂️ strlen:运行时计算字符串长度,适合内容处理。

  • 📦 sizeof:编译时获取内存大小,适合内存管理。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词