Hallo,
ich habe eine Frage zur Postfixnotation von In- und Dekrementierungsoperatoren in Bedingungen, z.B. While-Schleifen. Das folgende Programm
#include
#define BUFSIZE 4096
void spiegeln(char \*string)
{
char \*reverse=string;
while(\*reverse++)
{
printf("A");
printf("%i",\*reverse);
printf("B");
}
printf("\n%c\n",\*reverse);
printf("Z");
while(\*reverse-- != \*string)
{
printf("A");
printf("%c",\*reverse);
printf("B");
}
printf("\n");
}
int main()
{
char string[BUFSIZE]="123456";
string[3]=0;
spiegeln(string);
return 0;
}
gibt unter Linux folgendes aus:
A50BA51BA0B
5
ZABA3BA2BA1B
Ich kann mir das nur so erklären, daß die In-/Dekrementierungen in Postfixschreibweise nach der Überprüfung der Bedingung, aber vor Durchlaufen des Anweisungsblocks ausgeführt werden, egal, ob die Bedingung zutrifft oder nicht. Zeigt *reverse also nach der ersten While-Schleife auf die erste Stelle außerhalb des reservierten Platzes, wenn 4095 + NUL darin wären? Zeigt also *reverse nach der zweiten While-Schleife auf jeden Fall auf das Speicherfeld unmittelbar vor Beginn (!) des Strings? Ist das nicht höchst gefährlich?
Gruß
Markus