首页  >  文章  >  后端开发  >  为什么 C 中指针和数组字符串初始化时“strlen”和“sizeof”给出不同的结果?

为什么 C 中指针和数组字符串初始化时“strlen”和“sizeof”给出不同的结果?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 00:42:28173浏览

Why do `strlen` and `sizeof` give different results for pointer and array string initialization in C?

指针与数组字符串初始化:strlen 和 sizeof 的差异

在 C 编程中,使用指针和数组来初始化字符串可能会导致意想不到的差异strlen 和 sizeof 的输出。让我们通过检查特定示例来分析这种现象。

提供的代码片段:

<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)

  • strlen(str1) 返回 7,表示 的长度str1 指向的字符串(不包括空终止符)。
  • sizeof(str1) 返回 4,因为 str1 是一个具有 4 字节内存地址的指针变量(32 位系统)。

Array (str2)

  • 考虑到数组中字符串的长度,strlen(str2) 也会返回 7。
  • sizeof( str2) 返回 8,因为 str2 是一个包含 8 个字符的数组,包括空终止符。

为了进一步说明这些概念,让我们稍微修改一下代码:

<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>

这段代码将以 strlen: 7 的形式对 str1 和 str2 产生相同的结果。但是,sizeof(str1) 将保持为 4,表示内存地址,而 sizeof(str2) 将调整为 8,仍然考虑空终止字符。

因此,关键要点是在 C 编程中使用字符串时了解指针和数组的不同数据类型和大小特征。

以上是为什么 C 中指针和数组字符串初始化时“strlen”和“sizeof”给出不同的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn