【问题标题】:How does this example from K and R work [duplicate]K和R的这个例子是如何工作的[重复]
【发布时间】:2012-09-20 10:33:38
【问题描述】:

可能重复:
How does “while(*s++ = *t++)” work?

我试图理解以下示例。我有点困惑这实际上是如何工作的。

void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}

任何帮助都很棒。谢谢!

【问题讨论】:

    标签: c


    【解决方案1】:

    请记住,C 中的 string 只是一个指向字符列表的指针,以 \0 结尾。

    还要记住\0(空字节)是falsy,也就是说,如果它在一个条件中,那个条件就会是假的。

    这个函数得到一个指向源字符串开头的指针和一个指向目标字符串开头的指针。

    然后循环遍历源字符串中的每个字符,将字符复制到目标字符串。当条件被求值时,后自增 ++ 会将指针向前推进一个字节。

    据我所知,这个实现也有一个问题。如果源字符串的长度不完全相同,则末尾不会有空终止符。为了安全起见,您应该在目标字符串的末尾添加\0

    【讨论】:

      【解决方案2】:

      *s++ = *t++ 的值是赋值右侧的值*t。所以循环将在 *t 为 0 时终止,即在 t 指向的字符串的末尾。在将t 指向的字符分配给s 指向的字符之后,该条件还会增加t(和s)的值。循环体中没有任何内容,条件本身进行复制。

      【讨论】:

        猜你喜欢
        • 2021-07-24
        • 2021-10-05
        • 2017-11-26
        • 2021-10-14
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        相关资源
        最近更新 更多