先看两段代码对比一下:
char arr1[]={'h','e','l','l','o'};
printf("arr1长度为%d\n",strlen(arr1));
char arr2[6] = { 'h','e','l','l','o' };
printf("arr2长度为%d\n", strlen(arr2));
看起来区别甚微,实则天差地别!
第一段代码分析:输出随机值
arr1[ ]里面并没有限制元素个数,所以由后面大括号里的字符个数决定。
但是,strlen计算的是字符串长度,一直看到\0才会结束(长度并不包括\0)
在第一段数组arr1中,实际是这样的: [ h e l l o ][ ? ]
并不能知道合适会找到\0,所以返回的是随机值。
第二段代码分析:输出5
arr2[6] 中已经点明数组中有6个元素,只是用h e l l o 初始化了前五个(即不完全初始化)。
剩下的默认初始化为0。
\0的ASCII码值为0,0的ASCII码值也为0,所以到第六个是0时就会停。
【拓:‘0’ 为字符0,其ASCII码值为40】