qq1242009750 发表于 2016-6-18 21:28:39

这个语句是怎么运行的

……
while (n-- && (*target2++ = *target1++) != '\0')
                ;
……


谢谢各位鱼油

DAY 发表于 2016-6-18 21:40:55

首先判断n是否为零,不为零自动减一,然后判断后面的,具体后面怎么判断,我也不是很懂,,只能指点到这里了。。

屁哥 发表于 2016-6-18 22:15:11

前来学习

~风介~ 发表于 2016-6-19 21:28:25

依据“运算符优先级”就容易得多了。

Warrior_c 发表于 2016-6-20 15:19:48


for(;;)
{
        *target2 = *target1;

        if((n && *target2) == 0)
        {
                *target1++;
                *target2++;
                n--;       
                break;
        }
        *target1++;
        *target2++;
        n--;
        .....
}

倾天 发表于 2016-6-20 19:57:19

应该是这样:
while(1){
    if(n != 0){
      *terget1 = *terget2;
      if(*terget1 != '\0'){
         /*code*/
      }
      terget1++;
      terget2++;
    }
    n--;
}



xls6688 发表于 2016-6-21 00:43:42

看下

学习电脑 发表于 2016-6-22 16:09:46

buqingchu

mingcxx 发表于 2016-6-23 08:39:15

“*target2++ =”应该是不对的:target2++是target2所标记的增加1后的值,也就是一个常量。常量是不能被赋值的。

qq1242009750 发表于 2016-6-23 11:01:46

mingcxx 发表于 2016-6-23 08:39
“*target2++ =”应该是不对的:target2++是target2所标记的增加1后的值,也就是一个常量。常量是不能被赋 ...

这个的意思是*(target+1)

mingcxx 发表于 2016-6-25 11:42:44

本帖最后由 mingcxx 于 2016-6-26 13:16 编辑

qq1242009750 发表于 2016-6-23 11:01
这个的意思是*(target+1)

不好意思,没看清{:10_257:}那么两个target就是字符指针。代码就是这么运行的:如果n>0则减小1,继续执行,将target1指向的字符复制到target2,然后这两个字符指针增加一指向下一字符空间,如果复制到target2的字符不是空字符'\',进入循环。直到n>0为假,则整个与&&表达式为假,不执行 (*target2++ = *target1++) != '\0')这部分,直接退出(复制了前n个字符到target2);或者复制到target2的字符为空字符时也退出(复制了整个字符串到target2)
代码功能:就是将target1的字符串拷贝到target2,最多拷贝n个字符。也就是字符串函数strcpyn()的自定义写法。
再交流!
页: [1]
查看完整版本: 这个语句是怎么运行的