这段代码对我很好,我可以理解:
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;。
答案 0 :(得分:1)
因为您在len
终止条件中使用for
递增:
for (i=0; i<len; i++)
在每次迭代中,i
和len
都会递增。因此,i
始终保持小于len
,并且您获得无限循环。
最后,循环写入超出分配区域的值,这会导致分段错误。