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
)的值。循环体中没有任何内容,条件本身进行复制