char r[40];
strcpy(r,"abcdef");
strcat(r,r);
我的程序在第三行崩溃?
替换 strcat(r,r);通过 strcat(r,"abcdef");虽然工作正常......为什么会这样?
最佳答案
strcat()
从输入中读取并将其复制到输出,直到在输入中找到 \0
终止符。通过为输入和输出指定相同的数组,您可以在读取输入时修改输入。
您必须检查编译器对 strcat()
的特定实现,但是如果您跟踪如下所示的简单实现,您应该会看到为什么代码会在一段时间后崩溃:
char *strcat(char *dest, const char *src )
{
char *ret = dest;
if (dest && src)
{
while (*dest != 0)
++dest;
while (*str != 0)
*dest++ = *src++;
*dest = 0;
}
return ret;
}
在
while (*dest != 0)
循环之后,dest
现在指向输入的 \0
终止符。 while (*str != 0)
循环的第一次迭代然后用 a
替换该终止符,从而导致循环不再在它应该停止的地方停止。最终,循环将超出输入的边界并开始读取周围的内存,如果在命中无效内存之前没有找到另一个 \0
字节,最终它会崩溃。关于c - 如果使用相同的数组作为两个参数,strcat() 会崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22030329/