首页 > 后端开发 > C++ > 为什么 C 中的指针和数组的'strlen”和'sizeof”产生不同的输出?

为什么 C 中的指针和数组的'strlen”和'sizeof”产生不同的输出?

DDD
发布: 2024-11-01 03:03:02
原创
1075 人浏览过

Why Do `strlen` and `sizeof` Produce Different Outputs for Pointers and Arrays in C?

由于指针和数组初始化,Strlen 和 Sizedof 的不同输出

在 C 编程中,sizeof 和 strlen 函数提供有关大小和大小的信息分别是数据类型的长度。但是,在处理指针和数组时,这些函数的输出可能不同,从而导致混乱。

考虑以下示例:

<code class="c">char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
printf("%d %d\n", strlen(str1), sizeof(str1));
printf("%d %d\n", strlen(str2), sizeof(str2));</code>
登录后复制

此代码的输出是:

7 4
7 8
登录后复制
登录后复制

解释:

  • Str1(指针初始化): str1 被初始化为指向字符串“Sanjeev”的指针。 sizeof(str1) 给出指针的大小,在大多数体系结构中为 4 个字节。另一方面,strlen(str1)返回str1指向的字符串的长度,即7(不包括空终止符'')。
  • Str2(数组初始化): str2 被初始化为长度为 8 的字符数组。 sizeof(str2) 给出该数组的大小,包括空终止符,即 8 个字节。同样,strlen(str2) 返回数组中存储的字符串的长度,也是 7。

为了进一步阐明差异,请考虑对代码进行以下修改:

<code class="c">char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;
printf("%d %d\n", strlen(str1), sizeof(str1));
printf("%d %d\n", strlen(str2), sizeof(str2));</code>
登录后复制

在这种情况下,输出将是:

7 4
7 8
登录后复制
登录后复制

即使 str1 和 str2 现在都引用同一个字符串,sizeof(str1) 仍然返回指针的大小。这是因为 str1 是指向数组第一个元素的指针,而 str2 是字符数组。

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

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