为什么结果为 0

Why the result is 0?

本文关键字:结果 为什么      更新时间:2023-10-16

请参阅以下代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
 char a[1000];
 int i;
 for(i = 1;i<1000;i++)
 {
  a[i] = 5;
 }
 printf("%dn",strlen(a));
 return 0;
}

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

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

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

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

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

 #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] = '';//NULL terminator shall be there 
     printf("%dn",strlen(a));//1000
     return 0;
 }
相关文章: