当前位置:   article > 正文

C语言——字符串中sizeof和strlen的辨析

C语言——字符串中sizeof和strlen的辨析

在C语言中,sizeofstrlen 函数在处理字符串时有明显不同的作用和结果。

sizeof

  • 定义sizeof 是一个编译时操作符,用于获取对象或类型在内存中占用的字节数。
  • 字符串中的行为:当 sizeof 应用于字符串(实际上是字符数组)时,它返回的是整个数组所占用的字节数,包括字符串的结尾空字符 '\0'。但是,这个大小是在编译时就确定的,与字符串在运行时实际包含的字符数无关。
示例:
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char cdata[] = "hello";
  6. char *pdata = "hello";
  7. char cdata2[128] = "hello";
  8. printf("sizeof cdata: %d\n",sizeof(cdata));
  9. printf("sizeof pdata: %d\n",sizeof(pdata));
  10. printf("sizeof cdata2: %d\n",sizeof(cdata2));
  11. return 0;
  12. }

输出:

  1. sizeof cdata: 6
  2. sizeof pdata: 8
  3. sizeof cdata2: 128

由此可见sizeof计算字符串长度时是包括,字符串结尾默认的 '\0 ' 的。同时在使用字符数组定义时,如果声明时给定了数组大小,而有效字符数不足时会默认补 '\0 ' 并计入字符串长度的。在使用指针定义时,由于pdata本身就是一个指针,而且C语言中用8个字节保存一个地址,所以其输出为8。

strlen

  • 定义strlen 是一个函数,定义在 <string.h> 头文件中,用于计算以 '\0' 结尾的字符串的长度(不包括结尾的空字符 '\0')。
  • 字符串中的行为strlen 在运行时遍历字符串,直到遇到第一个 '\0' 字符,然后返回它之前字符的数量。这意味着 strlen 的返回值依赖于字符串在内存中的实际内容。
示例:
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char cdata[] = "hello";
  6. char *pdata = "hello";
  7. char cdata2[128] = "hello";
  8. printf("strlen cdata: %d\n",strlen(cdata));
  9. printf("strlen pdata: %d\n",strlen(pdata));
  10. printf("strlen cdata2: %d\n",strlen(cdata2));
  11. return 0;
  12. }

输出:

  1. strlen cdata: 5
  2. strlen pdata: 5
  3. strlen cdata2: 5

从输出可以看出,在定义字符串数组时,无论是否声明数组长度,strlen函数都只会计算有效字符的长度,而且不包含 ' \0 '。

总结

  • sizeof 在编译时确定对象或类型的大小,对于字符串(字符数组)来说,它返回的是整个数组的大小,包括未使用的空间和结尾的空字符。
  • strlen 在运行时计算字符串的长度,即字符串中字符的数量(不包括结尾的空字符),它依赖于字符串的实际内容。

在处理字符串时,正确选择 sizeof 和 strlen 非常重要,因为它们的返回值和用途截然不同。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/895208
推荐阅读
相关标签
  

闽ICP备14008679号