是否有必要初始化char数组以获得准确的长度?

时间:2013-06-11 16:00:38

标签: c string

在下面的示例中,当我定义char数组未初始化并想要查找长度时,它是未定义的行为。

#include<stdio.h>
 int main()
{
char a[250];
printf("length=%d\n",strlen(a));
}

我得到了“0”。我不知道怎么样?解释一下。

4 个答案:

答案 0 :(得分:6)

运气。无论运气好坏都是意见问题。数组的内容是已经占用内存的任何内容,并且未初始化。在您的情况下,它发生在第一个字节是'\0'

当然,这是未定义的行为,你不能依赖它以这种方式发生。

答案 1 :(得分:4)

你在你的例子中说过你使用未初始化的char数组来显示未定义的行为,然后当你得到“0”时你想要一个解释?这是......未定义的行为。

如果长度为0,则意味着在未初始化的数组中恰好有0作为a[]的第一个元素。当它是一个未初始化的本地时,意味着,就C标准而言,任何东西都可以存在,包括0。


要解决标题中的问题:“是否有必要初始化char数组以获得准确的长度?”

是的,为了能够通过strlen()函数确定地知道char数组中字符串的长度,需要存在null终止符。这意味着它需要以某种方式初始化或设置。

答案 2 :(得分:3)

正如其他答案所说,strlen()结果更多的是运气而不是定义的行为

要查找内存块的“大小”,请使用sizeof()代替

注意:我还添加了string.h并对printf

中的整数进行了长时间转换
#include<stdio.h>
#include<string.h>
 int main()
 {
     char a[250];
     printf("length=%ld\n",strlen(a));
     printf("sizeof=%ld\n",sizeof(a));
 }

答案 3 :(得分:2)

定义时

char a[250];

数组将包含garabage内容并随机。

strlen(a)计算not null charachter('\0')的数量,直到它找到一个空字符然后停止。

因此,如果您的char a[250];数组包含garabage元素且第一个元素随机设置为null '\0',则strlen(a)将返回0