首页 > 后端开发 > C++ > 为什么 C 中基于指针和基于数组的字符串的'strlen”和'sizeof”产生不同的结果?

为什么 C 中基于指针和基于数组的字符串的'strlen”和'sizeof”产生不同的结果?

Patricia Arquette
发布: 2024-11-02 06:37:02
原创
266 人浏览过

Why do `strlen` and `sizeof` produce different results for pointer-based and array-based strings in C?

基于指针和基于数组的字符串初始化的字符串长度和大小计算的不同输出

理解结果

创建基于指针的字符串 str1 和基于数组的字符串 str2 具有相同的值,函数 strlen 和 sizeof 会产生不同的结果。具体来说,对于声明:

<code class="c">char *str1 = "Sanjeev";
char str2[] = "Sanjeev";</code>
登录后复制

strlen 对于 str1 和 str2 都返回 7,因为它测量字符序列的长度,不包括末尾的空终止符 ( )。

然而,sizeof 产生不同的值:

  • sizeof(str1) 返回 4,因为它计算的是指针变量,通常为 4 个字节(32 位系统)。
  • sizeof(str2) 返回 8,因为它确定数组的大小,其中包括空终止符,从而产生 8 个字节 (7字符 1 空终止符)。

根本区别:数据类型与内存Allocation

sizeof 测量数据类型的大小,而 strlen 测量字符序列的长度。对于str1,它是一个指向char的指针,因此sizeof返回指针的大小。对于 str2,它是一个字符数组,因此 sizeof 返回整个数组的大小,包括空终止符。

仔细看看

来演示更好区分,考虑:

<code class="c">char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;</code>
登录后复制

现在,str1 和 str2 都指向同一个数组。它们的 strlen 值为 7,但它们的 sizeof 值不同:

  • sizeof(str1) 为 4(指针大小)
  • sizeof(str2) 为 8(带有空终止符的数组大小) )

这说明了大小评估如何取决于底层数据结构。

以上是为什么 C 中基于指针和基于数组的字符串的'strlen”和'sizeof”产生不同的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板