【发布时间】:2020-01-12 01:27:51
【问题描述】:
我看到这个 C 程序使用指针将第一个字符串复制到第二个字符串。
void copy(char const *s1, char *s2)
{
for(;(*s2=*s1);++s1,++s2){};
}
我不明白停止 for 循环的条件,因为我可以写 (*s2=*s1)!='\0' 并且它可以工作,但如果我不写 !='\0' 它也可以工作。 for 循环如何知道何时停止?
【问题讨论】:
-
for循环在条件表达式为 false 或 0 时停止。(*s2 = *s1)有一个值。如果该值为 0,那么它被认为是错误的。如果不为0,则认为是真的。 -
“我明白为什么会这样,但我看不出 for 循环如何知道何时停止”——这似乎是一个自相矛盾的陈述。
-
该函数用于复制zero-terminated(C风格)字符串。
-
@JohnColeman 我认为 OP 意味着他们知道它如何复制字符,但不知道它是如何知道它何时到达字符串末尾的。
-
while (*s2++ = *s1++) {;}Kernighan-copy.