C语言strlen求数组长度。为什么会是这样,linux下GCC编译器。

int main (int argc, char **argv)
{
char p[] = {1,2,3,4,5,66,7,};
char q[] = {1,2,3,4};
char r[] = {1,2,3,4};
printf("length:%d\n",strlen(p));
printf("length2:%d\n",strlen(q));
printf("length3:%d\n",strlen(r));
return 0;
} /* ----- End of main() ----- */

~/kill_C/dou.c CWD: /home/pikaqiu/kill_C Line: 30/35:5

[pikaqiu@centos6 kill_C]$ gcc dou.c
[pikaqiu@centos6 kill_C]$ ./a.out
length:11
length2:15
length3:19

我做了实验,发现p[] ={1},这样就是5,p[]={1,2,3,4}就是8,很固定。不晓得为什么,求大神来个具体解答!
不要上来跟就说strlen求字符数组长度要加'\0',不加'\0'就是随机值这种扯淡的。谢谢

你换台机器就不是5 8的值了! 所谓的固定,是你机器内存情况刚好处在那种状态下。

你没有\0,strlen()就会自动去找\0位置,这个0位置在什么位置是不确定的。

strlen(s)函数,从s首地址开始一直统计到\0位置,其中有几个字节就输出长度为几!

#include <stdio.h>
#include <string.h>
void main()
{
int i=0; //这里加上这个,你再去试,结果一定会有变化的,原理,自己思考一下吧
    char p[] = {1,2,3,4,5,66,7,};
    char q[] = {1,2,3,4};
    char r[] = {1,2,3,4};
    printf("length:%d\n",strlen(p));
    printf("length2:%d\n",strlen(q));
    printf("length3:%d\n",strlen(r));
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-18
你看下p,q,r的地址,它们的地址应该是相邻的,strlen会从开始位置一直找\0,直到找到为止,懂了麼
相似回答