gpt4 book ai didi

c - 为什么在 C 语言中字符串长度要加一其容量?

转载 作者:行者123 更新时间:2023-11-30 21:47:19 26 4
gpt4 key购买 nike

您的字符串长度应该比您希望它能够容纳的最大字符数多一。足够逻辑:字符串以 NULL 字符终止。

这是大多数新手都会得到的非常笼统的建议。然而,随着我在编程方面的成长,现在看来它并不那么正确。

任何类型数组的索引,无论是 int 还是 char ,都从 0 开始。因此,大多数数组的最大索引值比其数值小一。与字符串相同,但由于它末尾有一个额外的字符,因此它会增加 1。因此,字符串长度与其中的字符数相同。

<小时/>

要看看我是否正确,请参阅以下代码片段:

char str[9];
scanf("%s", str);
printf("%d", strlen(str));

使其成为一个成熟的程序并运行它。输入 123456789 (保证为 9 个字符的长文本),然后查看结果。它可以保存字符串,果然,字符串长度是 9

<小时/>

我什至亲眼目睹许多专家程序员说字符串大小应该加一其容量。这个建议很大程度上是一个神话,还是我在某个地方出错了?

编辑

假设我想创建一个整数数组 Arr ,它可以容纳 x 个元素。 Arr 最后一个元素的索引值将比 x 小 1,因为索引值从 0 而不是 1 开始。所以,它的长度是 x-1

那么你会如何声明呢?我会这样做: int Arr[x-1]; 。我认为这没有任何问题。

现在,如果 Arrchar 类型数组(即字符串),则 Arr 的长度将比其对应的 int 长度多 1,因为它末尾有一个额外的 NULL 字符。这最终将是: (x-1)+1=x

Code to demonstrate this

那么为什么这次的声明必须是 char Arr[x+1] 而不是简单的 char Arr[x]

最佳答案

您对索引的看法是正确的。但是:

char str[9];

当您以这种方式声明字符串时,数字9 就是数组长度。减去 NULL,只能有 8 个字符,而不是 9 个。数组的长度是数组中元素的数量,而不是您想象的最大索引值。您混淆了这些术语。

许多其他答案甚至评论已经解释了您的程序为何有效。

关于c - 为什么在 C 语言中字符串长度要加一其容量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43424481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com