strtok modifica el string que se le pasa inicialmente, por tanto sucesivas invocaciones con el mismo buffer, mostrará datos cambiados, como ves que ocurre.
Sugiero que cambies:
por
para crear memoria nueva (y copiar en ella lo que ya tienes) cada vez que cuentas con un nuevo string.