2016-07-11 4 views
1

이 코드는 나에게 잘 작동하고 나는 그것을 이해할 수 :왜이 방법으로 문자열을 복제 할 수 있습니까?

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)); 
} 

전에, 나는이 시도하고 나는 "분할 오류"있어요. 이유 : :

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

s[len] = '\0'; 

결과는 "AnaAna"여야합니다.

답변

1

당신이 for 종료 조건에 사용되는 len을 증가 되었기 때문에 :

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

마다 반복 ilen 모두가 증가하고 있습니다. 따라서 i은 항상 len보다 작으며 무한 루프가 발생합니다.

결국 루프는 할당 된 영역을 초과하는 값을 작성하여 세그먼트 화 오류가 발생합니다.

+0

엉망진창! 나는 지금 본다. 고마워, 알렉스. – Ricardo