on ne va pas se bagarrer la dessus, on parle de * et ++ dans le cas d'expression (a*b et a++) dans votre cas * designe un POINTEUR et pas une multiplication.
de plus c'est normal qu'a la fin de la boucle en *str++ str soit vide, c'est a cause du ++, tu as une chaine de 4, le fait de faire *str++ dans une boucle fait ceci :
cout << *str++ equivaut a :
cout << *str ; *str=*str+1; (la on decale de 1 vers la droite le debut de *str) d'ou a la fin de la boucle 1 str="EST", la boucle 2 str="ST" ....