C 这个来自K和R的例子是如何工作的

C 这个来自K和R的例子是如何工作的,c,C,可能重复: 我试图理解下面的例子。我有点困惑这到底是怎么回事 void strcpy(char *s, char *t) { while (*s++ = *t++) ; } 任何帮助都很好。谢谢 请记住,C中的字符串只是指向字符列表的指针,以\0结尾 还要记住,\0(空字节)是falsy,也就是说,如果它处于某个条件中,则该条件将为false 此函数获取指向源字符串开头的指针和指向目标字符串开头的指针 然后,它在源字符串中的每个字符上循环,将该字符复制到目标字符串。计算条件时,后增量++将指

可能重复:

我试图理解下面的例子。我有点困惑这到底是怎么回事

void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
任何帮助都很好。谢谢

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

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

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

然后,它在源字符串中的每个字符上循环,将该字符复制到目标字符串。计算条件时,后增量
++
将指针向前推进一个字节

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

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

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

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

然后,它在源字符串中的每个字符上循环,将该字符复制到目标字符串。计算条件时,后增量
++
将指针向前推进一个字节


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

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

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