2016-07-11 3 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)); 
} 

Раньше я попробовал это, и я получил «Сегментация Fault». Почему ?:

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

s[len] = '\0'; 

Выход должен быть: «AnaAna».

ответ

1

Потому что вы были увеличивающиеся len, который используется в состоянии for окончания:

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

В каждой итерации как i и len увеличиваются. Таким образом, i всегда остается меньше len, и вы получаете бесконечный цикл.

В конце концов, цикл записывает значение за пределы выделенной области, что приводит к ошибке сегментации.

+0

Какой беспорядок! Я вижу сейчас. Спасибо, Алекс. – Ricardo

Смежные вопросы