【发布时间】:2015-09-02 08:23:57
【问题描述】:
void strcpy(char *s, char *t)
{
while ((*s++ = *t++) != '\0');
}
和
void strcpy(char *s, char *t)
{
while (*s++ = *t++);
}
都是一样的,这是什么意思?删除条件有什么作用?
【问题讨论】:
标签: c
void strcpy(char *s, char *t)
{
while ((*s++ = *t++) != '\0');
}
和
void strcpy(char *s, char *t)
{
while (*s++ = *t++);
}
都是一样的,这是什么意思?删除条件有什么作用?
【问题讨论】:
标签: c
表达式*s++ = *t++ 仍然有结果,并且该结果可以用作条件。更准确地说,结果将是复制的字符,并且您(应该)知道所有非零值都被认为是“真”,并且您也(应该)知道 C 中的字符串是 zero 终止的.
所以循环所做的就是复制字符直到到达字符串终止符。
【讨论】:
它检查字符串\0NUL的结尾是否到达,同时将*t的值复制到*s,然后增加两个指针。
要回答您的第二个问题,请考虑这一点,
有什么区别
if(a != 0)
&
if(a)
这只是编写相同代码的两种方式。我能想到的唯一区别是代码清晰。第一个更详细,更易于阅读、理解和维护。
【讨论】:
条件是检查是否已经到达字符串的末尾,而不是越过它。如您所知,在 C 中,字符串以 '\0' 字符结尾
【讨论】: