C语言求助4

来源:百度知道 编辑:UC知道 时间:2024/05/15 19:28:29
fun(char *a,char *b)
{while((*a!='\0')&&(*b!='\0')&&(*a==*b))
{a++;b++;}
return(*a-*b);
}
该函数功能是A。计算a和b所指字符串长度之差
B。将b所指字符串连接到a所指字符串中
C。将b所指字符串链接到a所指字符串后面
D。比较a和b所指字符串的大小。

各位选出答案以后麻烦再给我逐步讲解下这个程序,我没看懂。谢谢
求助啊 ,详细讲一下啦。我这有答案,能不能讲讲过程?

大概懂了。但是A为什么错了呢

================================
问题补充:求助啊 ,详细讲一下啦。我这有答案,能不能讲讲过程?

大概懂了。但是A为什么错了呢
================================
如果是想求a和b所指字符串长度之差,
那么应该用strlen(a)-strlen(b)

选择D.比较a和b所指字符串的大小。

讲解:
fun(char *a,char *b)
{
while((*a!='\0')&&(*b!='\0')&&(*a==*b)) //循环继续条件:a没有到串尾,并且b也没有到串尾,并且当前指针a和指针b所指向的字符相同
{a++;b++;} //如果a,b字符串都没有结束,并且俄当前指向的字符相同的话,那么就将指针向后移一位,继续判断后面的字符是否相同
return(*a-*b); //将当前指针a和指针b所指向的字符的ASCII码值的差返回
}

return(*a-*b);有如下4种情况:
1. 字符串a结束了,但是b没有结束,也就是说b比a要长,那么*a-*b一定是一个负值(因为\0的ASCII码值为0,而其他字符的ASCII码值一定大于0)
2. 字符串b结束了,但是a没有结束,也就是说a比b要长,那么*a-*b一定是一个正值(因为\0的ASCII码值为0,而其他字符的ASCII码值一定大于0)
3. 字符串a结束了,字符串b也结束了,也就是说a,b一样长而且字符还都完全相同,那么*a-*b一定是0
4. 字符串a没有结束,字符串b也没有结束,但是在之前的循环中出现a,b中的相同位置上的字符不一样的情况了,那么如果指针a所指向的字符比指针b所指向的字符大的话,*a-*b是一个正值;如果指针a所指向的字符比指针b所指向的字符小的话,*a-*b是一个负值;

所以:
如果fun()函数的返回值为正的话,说明字符串a大于b
如果fun()函数的返回值为