将字符串复制到另一个C

时间:2015-12-29 15:57:35

标签: c string

在K& R书中,下面给出了复制字符串的初始(和正确)函数

void strcpy (char *s, char *t)
{
    while ( (*s++ = *t++) != '\0')
        ;
}

然后据说等效函数是

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

我不明白while循环如何在第二种情况下停止。

由于

3 个答案:

答案 0 :(得分:4)

简单赋值表达式有两个效果:

1)将值存储到左侧的左值(这被称为'副作用')

2)表达式本身的计算结果为一个值 - 分配给该左值的值

while循环将重复,直到其条件计算为0.因此第二个示例中的循环将一直运行,直到将值0分配给目标字符串。

答案 1 :(得分:2)

这是因为对于表达式,返回表达式的结果。

if( (a = 4) == 4)

if语句将评估为True

所以,在你的情况下

while (*s++ = *t++)

当它到达NUL字符\0时,它将评估为False,循环将退出。

答案 2 :(得分:2)

表达式*s++ = *t++在评估后也有一个值。如果它评估为非零值,则条件为true,否则为false

while (*s++ = *t++)相当于while ((*s++ = *t++) != 0)