2016-07-11 14 views
1

Dieser Code funktioniert gut zu mir und ich kann es verstehen:Warum kann ich eine Zeichenfolge auf diese Weise duplizieren, aber nicht auf diese Weise?

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

Früher habe ich versucht, diese und ich bekam eine „Segmentation Fault“. Warum ?:

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

s[len] = '\0'; 

Die Ausgabe sollte: "AnaAna" sein.

Antwort

1

Weil Sie len wurden erhöht wird, die in der for Abbruchbedingung verwendet wird:

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

In jeder Iteration sowohl i und len werden erhöht. So bleibt i immer weniger als len, und Sie erhalten eine Endlosschleife.

Schließlich schreibt die Schleife einen Wert über den zugewiesenen Bereich hinaus, der zum Segmentierungsfehler führt.

+0

Was für ein Chaos! Ich sehe jetzt. Danke, Alex. – Ricardo

Verwandte Themen