Erklärung bei einem kleinen Reverse Script benötigt

BastianW

Mitglied
Hallo zusammen,

ich bräuchte einmal jemand der mir ein Scriptteil erklärt. Ich versuche es nun geschlagene 4 Stunden zu verstehen ich schaffe es nicht und gehe nun frustriert ins Bett...

Hier das Script:

Code:
main()
{

   int i,len;
   printf("Enter String (max 10 Char): ");
   scanf("%s",str);


    printf("\nUnsere Eingabe hat %i Zeichen",strlen(str));

   len=strlen(str)-1; 

   for(i=0; i < strlen(str)/2 ;i++)
   {
      temp=str[i]; 
      str[i]=str[len]; 
      str[len--]=temp; 
   }

   printf("%s",str);

}

Gehen wir mal davon aus jemand gibt Bastian ein.

- Dann wird dir FOR Schleife durchlaufen
- In Temp steht der 0 Inhalt vom array str, das große B
- in die 0 Stelle vom Array wird der Buchstabe n (6 Stelle vom array) geschrieben

Und nun kommts:

Code:
str[len--]=temp;

Hier wird nach meiner Meinung nach an die 6-1 also 5 Stelle der Inhalt von Temp geschrieben. Scheinbar tut es das aber nicht. Die Funktion dreht meinen String genau um so wie sie es sollte. Blos warum? Ich würde erwarten das der Inhalt von temp an die 6 Stelle geschrieben wird, dort wo mal das n war.

Kann mir das jemand erklären oder bin ich einfach nur zu Müde um das zu verstehen?
 
Und nun kommts:

Code:
str[len--]=temp;

Hier wird nach meiner Meinung nach an die 6-1 also 5 Stelle der Inhalt von Temp geschrieben. Scheinbar tut es das aber nicht.
Der Post-Dekrement-Operator dekrementiert den Wert der Variable, gibt aber den alten Wert zurück. Deswegen entspricht diese Zeile der Anweisungsfolge
C:
str[len] = temp; len = len - 1;
.

Grüße, Matthias
 
Bei
str[len--]=temp;
Wird zuerst dem str[len] das temp zugewiesen und dann len eins runtergezählt, andere Schreibweise siehe oben

Das, was du angenommen hast, wäre
str[--len]=temp;
Da wird zuerst rüntergezählt und dann erst zugewiesen
 
Zurück