1

可能重复:
“while(*s++ = *t++)”是如何工作的?

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

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

任何帮助都很棒。谢谢!

4

2 回答 2

3

请记住,C 中的字符串只是指向字符列表的指针,以 . 结尾\0

还要记住\0(空字节)是falsy,也就是说,如果它处于某个条件中,那么该条件将为 false。

此函数获取指向源字符串开头的指针和指向目标字符串开头的指针。

然后循环遍历源字符串中的每个字符,将字符复制到目标字符串。评估条件时,后增量++将使指针前移一个字节。

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

于 2012-09-20T10:35:50.143 回答
2

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

于 2012-09-20T10:38:17.900 回答