int __cdecl strcmp(const char *src,const char *dst)
{
int ret=0;
while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src,++dst;
if(ret<0)
ret=-1;
else if(ret>0)
ret=1;
return(ret);
}
其中!(ret = *(unsigned char *)src - *(unsigned char *)dst)是什么意思?
++str和++dst在这里是不是和str++以及dst++的效果是一样的
C语言的strcmp用函数表示
答案:1 悬赏:60 手机版
解决时间 2021-02-04 16:26
- 提问者网友:十年饮冰
- 2021-02-04 01:26
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-02-04 02:18
1. 首先记住一件事,C语言中,数值0表示假,非0表示真(即!0=true)
2. *(unsigned char *)src,表示取src字符串中第1个字符
3. *(unsigned char *)dst,表示取dst字符串中第1个字符
4. ret=*(unsigned char *)src - *(unsigned char *)dst) ,表示2,3中这两个字符是否相等。如果相等,则为0。运算结果放在ret这个变量中。
5. !(ret = *(unsigned char *)src - *(unsigned char *)dst),如果相等,则!ret为真,否则为假
6. && *dst表示,询问dst字符串是否到达结尾?(即是否为NULL,也即是否为0?)
7. !(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)则表示上面(2-6)合起来,是否相等?是否达到dst结尾?只有两个字符相等,没到结果的时候,这个表达式才为真,才继续while() {}循环体内的代码:++src, ++dst;也就是两个字符串的指针,都指向各自字符串中的下一个字符的位置。
8. ++str和++dst在这里是不是和str++以及dst++的效果是一样的 ------ 是一样的。
2. *(unsigned char *)src,表示取src字符串中第1个字符
3. *(unsigned char *)dst,表示取dst字符串中第1个字符
4. ret=*(unsigned char *)src - *(unsigned char *)dst) ,表示2,3中这两个字符是否相等。如果相等,则为0。运算结果放在ret这个变量中。
5. !(ret = *(unsigned char *)src - *(unsigned char *)dst),如果相等,则!ret为真,否则为假
6. && *dst表示,询问dst字符串是否到达结尾?(即是否为NULL,也即是否为0?)
7. !(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)则表示上面(2-6)合起来,是否相等?是否达到dst结尾?只有两个字符相等,没到结果的时候,这个表达式才为真,才继续while() {}循环体内的代码:++src, ++dst;也就是两个字符串的指针,都指向各自字符串中的下一个字符的位置。
8. ++str和++dst在这里是不是和str++以及dst++的效果是一样的 ------ 是一样的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯