繁体   English   中英

这个字符串连接函数怎么了

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM