[英]what's wrong with this string concatenation function
为什么这段代码不能正常工作? 这是K&R练习5-3
char str[20]= "Hello world";
char str2[5] = "xxx";
int main(void) {
strcat(str, str2);
printf("%s", str);
return 0;
}
void strcat(char *s, char *a) {
while (*s++);
while (*s++ = *a++);
}
这是因为while(*s++);
即使在退出下一条语句之前命中NULL字符串终止符,它仍然会递增s
。 尝试:
while (*s) {
s++;
}
这样s
没有得到增加,当s
变空。 这样,第一个字符a
可以覆盖为NULL结束s
。
后缀递增/递减具有较高的优先级,但是操作数的实际递增或递减会延迟(要在语句完成执行之前的某个时间完成)。 所以在语句y = x * z ++; z的当前值用于评估表达式(即z ++评估为z),并且z仅在完成所有其他操作之后才递增( http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm )
更改
while(*s++)
至
while(*s && *(++s));
因此,为了使指针指向最后一个地址,先递增s,然后对其进行检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.