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/

10-12 14:50