c语言 字符数组内存问题

#include<stdio.h>
#include<string.h>
int main(){
char a[5];
char b[5];
int i,j;
i=strlen(a);
j=strlen(b);
printf("%d %d \n",i,j);
int k;
for(k=0;k<5;k++){
scanf("%c",&a[k]);
getchar();
scanf("%c",&b[k]);
getchar();
}
i=strlen(a);
j=strlen(b);
printf("%d %d",i,j);
return 0;
}
这是我的第一段代码
运行结果如下

img


#include<stdio.h>
#include<string.h>
int main(){
char b[5];
char a[5];
int i,j;
i=strlen(a);
j=strlen(b);
printf("%d %d \n",i,j);
int k;
for(k=0;k<5;k++){
scanf("%c",&a[k]);
getchar();
scanf("%c",&b[k]);
getchar();
}
i=strlen(a);
j=strlen(b);
printf("%d %d",i,j);
return 0;
}
这是我的第二段代码
运行结果如下

img


为什么它的声明方式相同 存入的东西也一样 最后得到的结果不同呢

strlen()函数,是判断以'\0'为结束符的字符串长度,上面两段代码,都是字符数组,不是字符串,所以用strlen()函数不能得到准确的长度值。


可以看下c语言参考手册中的 c语言-数组