Resultado sorprendente de un programa en C cuando se usa '*' para multiplicar

Después de resolver el ejercicio 5-10 en el K&R:

Escriba el programa expr, que evalúa una expresión polaca inversa desde la línea de comando, donde cada operador u operando es un argumento separado. Por ejemplo, expr 2 3 4 + * evalúa 2 * (3 + 4).

parece haber un problema en las expresiones con el carácter '*', incluso las básicas como: 2 2 *. Por alguna extraña razón, '*' no se coloca en eloperador array, mientras que todos los demás caracteres como '+', '-', '/' normalmente lo son. He aislado la parte del código (while loop) que parece estar mal. La función de inserción es del Capítulo 4 y solo es necesario compilar el código.

#include <stdio.h>

void push(double f);

main(int argc, char *argv[])
{
    int a = 0;
    int b;
    char operator[10];

    while (--argc > 0) {
        if (isdigit(*argv[argc]))
            push(atof(argv[argc]));
        else if (*argv[argc]=='+' || *argv[argc]=='-' || *argv[argc]=='*' || *argv[argc]=='/')
            operator[a++] = *argv[argc];
    }
    for (b = 0; b < a; b++)
        printf("%c", operator[b]);
    printf("\n");

    return 0;
}

#define MAXVAL 100  /* maximum depth of val stack */

int sp = 0;     /* next free stack position */
double val[MAXVAL]; /* value stack */

/* push: push f onto value stack */
void push(double f)
{
    if (sp < MAXVAL) 
        val[sp++] = f;
    else
        printf("error: stack full, can't push %g\n", f);
}

Salida

[user@machine Desktop]$ ./prog + +
++
[user@machine Desktop]$ ./prog *

[user@machine Desktop]$ ./prog * *

[user@machine Desktop]$ ./prog + / * -
-/+

Respuestas a la pregunta(1)

Su respuesta a la pregunta