永发信息网

main()

答案:4  悬赏:80  手机版
解决时间 2021-05-10 14:34

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开始的~~cd两个字符,长度当然是2了?beijing也是7个字符~~为什么问这样的问题?

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

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我办有一个农业银行卡,办的时候有密码了…可
在深圳龙岗天虹到龙华可以坐哪路车
什么是生物入侵者
西南2现在YXB能收流星落不呢?
在三角形ABC中,∠A=36°,AB=AC,BD是角平
GBA最终幻想战略版 二刀流怎么学
晨光唯美有意境的诗句,有关鱼美食句子
飞车高级驾照的“敦煌石窟”要用什么车跑?
我在汕头,请问在哪可以买到啤酒酵母粉
一冷一热脸容易变红,怎么预防呀?我有点红血
炫舞 刷衣服 怎么刷 需要什么 详细些
变化无常是什么意思,“变化无常”的意思是什
得了慢性咽喉焱要注意什么
我现在什么手艺都没有,现在学什么最有前途,
幸福是一定要自己争取的吗?
推荐资讯
请问一下连通的校园QQ卡接电话也需要收费吗?
AUTOCAD安装提示error 1718.文件
狂战气血旺盛要加么?
大明龙权在霸石岭可以买回城符么
乌龟冬眠吗
睡眠一直很浅怎么办?有什么改良的好方法?
怀孕了为啥现在那么怕热,还老出汗怎么回事!
N86什么颜色好看 我是男生/男人
hp 6535s wifi键黄灯常亮
进行家族ID多少?
梦见大虻蛇
谁能一拳打死自己
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?