main()
{char *p[10]={"abc","abcdefg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
}
执行后输出的为什么结果是2?字符串“cd”长度是2?
main()
{char str[][20]={"Hello","Beijing"},*p=str[0];
printf("%d\n",strlen(p+20));}
执行后的结果为什么是7?字符串”Beijing”的长度是7?
不懂啊。
main()
{char *p[10]={"abc","abcdefg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
}
执行后输出的为什么结果是2?字符串“cd”长度是2?
main()
{char str[][20]={"Hello","Beijing"},*p=str[0];
printf("%d\n",strlen(p+20));}
执行后的结果为什么是7?字符串”Beijing”的长度是7?
不懂啊。
1)
原型:extern int strlen(char *s);
功能:计算字符串s的长度
说明:返回s的长度,不包括结束符NULL(\0)。
char *p[10] 是一维指针数组 p[4] 下标从0开始计算 所以是第5个元素
因为是指针数组 所以p[4]存放的是"cd" 的首地址 类型是 char *, 因此利用strlen计算出来的长度是2
2) 第2题str是一个2维字符数组
str[][20] 是 一个有20列的2维数组行数省略通过赋的值来计算
str[0] 实际上是 *(str+0)+0 即首行0列地址。虽然是2维数组,但在内存中是线性排的
因此p+20 就是 *(str+0)+20 即第20列的地址 而20列 就是 逻辑上第2行0列的地址
也就是"Beijing"的首地址,因此调用strlen计算出来的是Beijing的长度
strlen是取得字符串的长度的,也就是字母的个数,不包括'\0'
"cd"其实长度是3,隐藏了个\0而已
注意,下标从0开始,p[0] 指向 "abc"
p[1] 指向 "abcdefg"
p[2] 指向 "dcdbe"
p[3] 指向 "abbd"
p[4] 指向 "cd"
第二个问题:
注意,p指向的是定长字符串,str[][20],每个串的长度是20.
所以,p+20 刚好越过第一个串 "Hello" ,指向第二个串 "Beijing" 的首地址,
"Beijing" 刚好7个字符。
所以, 结果是7。