结果为何为0?

fre*_*015 1 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;
}
Run Code Online (Sandbox Code Playgroud)

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

chr*_*ris 15

你永远不会分配或初始化a[0].在这种情况下,它恰好是'\0',所以strlen(a)返回0.

值得一提的是,呼吁strlena这里是不确定的行为,因为你是间接地试图读取未初始化,垃圾内存,a[0]作为搜索的第一步,找一个空终止符.即使将其明确地设置为0仍然会导致它在数组末尾运行时出现问题,直到找到0,崩溃或爆炸为止.