c - 这个字符串连接函数有什么问题

标签 c

为什么这段代码不能正常工作? 这是 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/

相关文章:

c - 如何使用给定的汇编代码查找 C 代码中变量之间的间隙值?

c - 我的程序不接受使用 getchar 的 c 中的简单字符串

c - UTF-8 3 和 4 字节字符表示

c - s [i]- '0'是什么意思?

有人可以解释一下这个声明中发生了什么吗?

c - 链接器如何决定要包含库的哪些部分?

c++ - 如何从 C FILE* 创建 C++ streambuf 对象,与指向的 FILE 对象共享其缓冲区(和缓冲区状态)?

c - 构建 C 应用程序以使用 libxml2 解析 xml 时出现错误 : cannot include iconv. h

c - 函数局部变量的字节分配以及 POP 指令是否仅调用一次

C编程校验位