C语言选择题,下列函数的功能是()

intf(char*a,char*b){while(*a++==*b++);if(*(a-2))return*(--a)-*(--b);答案是字符串比较,我根本不明白那个... int f(char *a, char *b) { while (*a++ = = *b++) ; if(*(a-2)) return *(--a)-*(--b);

答案是字符串比较,我根本不明白那个a-2,咋回事。。。
希望能有具体完整的解释,不要光说a-2
展开
 我来答
小帆向前冲
2014-11-28 · TA获得超过188个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:154万
展开全部
这个函数参数表里定义了两个指针a和b,分别指向两个字符串。执行while(*a++==*b++);语句时,我们知道,这条语句会在里面的条件成立时一直循环,也就是说,直到条件不成立才会执行后面的if语句。通过指针的++,指针会不断向后移,指向字符串的下一个元素,这个你知道吧?当条件不成立,也就是*a处这个元素不等于*b指向的字符串对应的位置的元素时(a和b同时++,位置是对应的),还要注意,这里用的是后++,这个语句其实相当于*a==*b,a++,b++,在不等于之后指针仍然向后移一位,所以while结束时,指针指向不相等元素的后一个位置。
这些懂了,后面a-2其实就是不相等元素的前一个位置,if语句判断这个位置是否为空,不为空时,输出--a,这里是前--,先进行a--,再return a,而a--后a就指向不相等元素的位置。
还有哪里看不懂?
追问
return *(--a)-*(--b);,应该是将不相等的那个位置的两个东东相减然后返回吧
追答
对,我看错了,sorry
风雷九州
2014-11-28 · TA获得超过3025个赞
知道大有可为答主
回答量:1127
采纳率:100%
帮助的人:433万
展开全部

楼主能不能贴一个全的代码,只看这一点代码的话,这代码里面全是BUG呀。

int f(char *a, char  *b) 

    while (*a++ == *b++) ;   //找到第一个不一样的字符
    
    if(*(a-2))   //这个可能会访问到非法的地址的
    
    return *(--a)-*(--b); //两个不相同的字符想减
}

比如char * a = "dbc"    char * b = "avcdbc" 


经过while (*a++ == *b++)之后


a变成了"bc" b变成了“vcdbc”


这样a - 2之后就访问到了字符串前面的地址,这个地址里面的值怎么能确定呢?这种也是非法的字符串越界访问呀。

追问
这是一道二级原题,就是选择,哪里来的完全的代码。。。不过还是辛苦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式