1

请参阅以下代码:

#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 ,为什么?任何解释将不胜感激。

4

3 回答 3

15

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

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

于 2012-10-05T04:43:08.330 回答
1

strlen() 从 0 而不是 1 开始计数。执行此操作,您将:

for(i = 0;i<1000;i++)

于 2012-10-05T04:59:00.910 回答
-1
 #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;
 }
于 2012-12-24T19:06:01.900 回答