奇怪的是循环。困惑

时间:2016-07-01 20:15:21

标签: c

c编程新手。有人可以帮助我理解while循环在这段代码中做了什么吗?我从未见过这种类型的while循环。

但是,我确实理解它正在执行指针算法,但实际上它是用伪代码或简单英语分解的呢? :)

char*
cpy (char* s)
{
  char *dest, *d;

  d = dest = malloc(strlen(s) * sizeof(char) + 1);

  if (d)
    while ((*d++ = *s++));
  return dest;
}

3 个答案:

答案 0 :(得分:2)

在C中,值0表示false,其他任何表示true。字符串以空字符结尾,值为0.此while循环将所有字符从s复制到d,直到达到null(字符串结尾)。

作业*d++ = *s++返回与*s++分配给*d

相同的值

循环后,sd都将指向空字符。请注意,也会复制null。

答案 1 :(得分:1)

表达式*d++ = *s++实际上返回一个值。直到它找到一个字节:\0,当置于while条件时,它将为零并将跳转到下一个语句:return语句。

答案 2 :(得分:1)

伪代码:

if dest is not null initially:
    keep a pointer to the current character in "s" and "d".
    (copy step) copy the current character in "s" to the same position in "d"
    move the pointer to the next character in "d" and "s"
    if the character copied in "copy step" was not '\0' or null:
        jump back to "copy step"
    otherwise:
        break out of loop