void reverse(char *s)
{
int c;
static int i = 0;
static char *p = NULL;
if (p == NULL) p = s;
if (*s) {
c = *s;
reverse(s + 1);
p[i++] = c;
}
return;
}
これを
for (i=1; i<1000000; i *= 10) {
sprintf(p, "%ld", i);
printf("before %s\n", p);
reverse(p);
printf("after  %s\n", p);
}
こういう風に使うと
before 1
after  1
before 10
after  101
before 100
after  100001
before 1000
after  1000
という結果になってしまいます。
どうして逆にならなかったり、おかしな表示になるんでしょうか?