在 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)
Array (str2)
为了进一步说明这些概念,让我们稍微修改一下代码:
<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中文网其他相关文章!