此方法可以将内容从1个字符串复制到另一个字符串。 我的问题是当它到达字符串末尾时它是如何停止的?怎么知道什么时候停止?
void strcpy2(char *s, char *t)
{
while (*s++ = *t++)
;
}
答案 0 :(得分:6)
它停止,因为*s
的计算结果为0.
也就是说,复制的最后一个字符是\0
(字符串终结符)。
评估为0是在C中表示布尔值false的方式,因此当发生这种情况时循环退出。
答案 1 :(得分:3)
您的代码相当于。
void strcpy2(char *s, char *t) {
while (*t) {
*s = *t;
s++;
t++;
}
*s = *t;
}
当t指向的char为'\ 0'时,while循环将终止 在此之前,它会将指向的字符串复制到s指向的字符,然后将s和t递增以指向其数组中的下一个字符。
答案 2 :(得分:2)
字符串后跟'\0'
个字符。这应该是源字符串的终止条件。这可能就像:
void strcpy2(char *s, char *t)
{
while (*s !='\0')
{
*(t) = *(s);
s++;
t++;
}
*t = '\0';
}
注意:应为t
分配足够的内存,否则会出现分段错误。
答案 3 :(得分:1)
在C中,字符串的结尾标有NULL终结符\0
,即值为0。
在C中,任何非零值都被认为是真实的& 0是假的。
当达到字符串结尾时,while循环在条件&中看到0
。因此,退出。