求字符串长度的函数

#include"stdio.h"intfun(char*x){char*y=x;while(*y++){};returny-x-1;}voidmain(){char*p... #include "stdio.h"
int fun(char *x)
{
char *y=x;
while(*y++){};
return y-x-1;
}
void main()
{
char *p ="abcde";

printf("%d\n",fun(p));
}
为什么返回 y-x-1;而不是y-x?
是先*y 在y++
还是先y++ 再*y
展开
 我来答
hsw625728
2008-03-04 · TA获得超过109个赞
知道小有建树答主
回答量:145
采纳率:0%
帮助的人:124万
展开全部
C 的字符串都有一个结尾,就是 '\0' ,
你题目中的指针的初始值是 "abcde" ,
在p中存放的数据就是 "abcde\0",其实是6个字符,
你的while(*y++)操作在没有遇到最后的 '\0'时一直在累加,
而计算到'\0'后才能执行后的return y - x - 1,
这个时候就多计算了一个'\0'这个字符,
所以在最后要减去多算的这个字符,也就是减去 1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
f1yinthesky
2008-03-04 · TA获得超过947个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:0
展开全部
while(*y++)的意思是
先判断*y是否为0
如果是,那么y=y+1结束循环
如果不是,y=y+1继续循环。
所以,在最后结束循环的时候y指针是没有指到字符串的结束符号'\0',而是指到了他后面的一个位置,需要把这个多余的位置减掉。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
曾相林
2008-03-04 · TA获得超过565个赞
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:162万
展开全部
因为这里是Y++,不是++Y,实际上每次判断的是Y,但是判断过后就Y自增了一个,当你判断Y=0(就是字符串结束标志/0)过后,Y还自增了一个,也就是说现在在你的程序里面,Y已经是7了,本来应该是6个长度,
多仪要减1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ww010252
2008-03-04 · 超过13用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:0
展开全部
变量Y一直在做++操作,一开始的时候*Y=X,但在最后一次Y++,是空,while跳出,这个++操作是不和题意的,所以要减掉最后一次++
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
账号已注销ZXCG
高粉答主

2020-11-24 · 说的都是干货,快来关注
知道答主
回答量:8.4万
采纳率:6%
帮助的人:4735万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式