为什么我可以通过这种方式复制字符串,但不是这样?

时间:2016-07-11 14:46:03

标签: string loops unary-operator

这段代码对我很好,我可以理解:

char * strduplica(char *s)
{
    int i, len = strlen(s);

    for (i=0; i<len; i++)
        s[i+len] = s[i];

    s[i+len] = '\0';

    return s;
}

main()
{
    char s[20]="Ana";
    puts(strduplica(s));
}

之前,我试过这个,我得到了一个&#34;分段错误&#34;。为什么:

for (i=0; i<len; i++)
    s[len++] = s[i];

s[len] = '\0';

输出应为:&#34; AnaAna&#34;。

1 个答案:

答案 0 :(得分:1)

因为您在len终止条件中使用for递增:

for (i=0; i<len; i++)

在每次迭代中,ilen都会递增。因此,i始终保持小于len,并且您获得无限循环。

最后,循环写入超出分配区域的值,这会导致分段错误。