为什么这段代码不能正常工作? 这是 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
变为 NULL 时,s
不会增加。这样,a
的第一个字符就可以覆盖 s
的 NULL 终止符。
后缀递增/递减具有高优先级,但操作数的实际递增或递减被延迟(在语句完成执行之前的某个时间完成)。所以在语句 y = x * z++; 中z 的当前值用于计算表达式(即 z++ 计算为 z),并且 z 仅在完成所有其他操作后递增 ( http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm )
关于c - 这个字符串连接函数有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131804/