请参阅以下代码:
#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 ,为什么?任何解释将不胜感激。
您永远不会分配或初始化a[0]
. 在这种情况下,它恰好是'\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] = '\0';//NULL terminator shall be there
printf("%d\n",strlen(a));//1000
return 0;
}