结果为何为0?

时间:2012-10-05 04:41:02

标签: c++ c

请参阅以下代码:

#include<stdio.h>
#include<stdlib.h>

int main()
{
 char a[1000];
 int i;
 for(i = 1;i<1000;i++)
 {
  a[i] = 5;
 }

 printf("%d\n",strlen(a));

 return 0;
}

结果为0,为什么?任何解释将不胜感激。

3 个答案:

答案 0 :(得分:15)

您永远不会分配或初始化a[0]。在这种情况下,恰好是'\0',因此strlen(a)返回0。

值得注意的是,在此strlen上调用a是未定义的行为,因为您间接尝试读取未初始化的垃圾内存a[0]作为第一步搜索以找到空终止符。即使将其明确地设置为0仍然会导致它在数组末尾运行时出现问题,直到找到0,崩溃或爆炸为止。

答案 1 :(得分:1)

strlen()从0开始计数而不是1。 这样做,你将会去:

表示(i = 0; i <1000; i ++)

答案 2 :(得分:0)

 #include<stdio.h>
 #include<stdlib.h>
 int main()
 {
     char a[1000];
     int i;
     for(i = 0;i<1000;i++)//starts with 0 not 1
       a[i] = 5;
     a[i] = '\0';//NULL terminator shall be there 
     printf("%d\n",strlen(a));//1000

     return 0;
 }