永发信息网

main()

答案:4  悬赏:80  手机版
解决时间 2021-05-10 14:34
  • 提问者网友:轮囘Li巡影
  • 2021-05-10 04:27

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?

不懂啊。

 

最佳答案
  • 五星知识达人网友:孤独入客枕
  • 2021-05-10 05:34

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的长度

全部回答
  • 1楼网友:一叶十三刺
  • 2021-05-10 08:15

strlen是取得字符串的长度的,也就是字母的个数,不包括'\0'

"cd"其实长度是3,隐藏了个\0而已

  • 2楼网友:末日狂欢
  • 2021-05-10 07:57
下标是从0开始的~~cd两个字符,长度当然是2了?beijing也是7个字符~~为什么问这样的问题?
  • 3楼网友:深街酒徒
  • 2021-05-10 06:22

注意,下标从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。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯