Und das ist es auch.
Ich habe noch mal in den Stroustrup gesehen und dabei die Erklärung für das Verhalten gefunden (und wie ich mir dachte hat uninitialisierter Speicher eine Rolle gespielt). Ich zitiere:
Das wirkt erst mal ganz harmlos, bis man merkt: Dadurch wird auch definiert, wie viel Speicher für den Wert reserviert wird. Für die enums wurde bei mir grundsätzlich je 1 Byte reserviert, der Rest des Speichers, auf den sprintf() zugriff, war uninitialisiert.Zitat
Wenn enmSpaces gemalloc()t gewesen wäre, hätte ich auch eine korrekte Ausgabe bekommen müssen.
Merke: Wenn man mit enums arbeitet vorher alle Variablen, die mit ihnen in Kontakt kommen, initialisieren oder Funktionen verwenden, die sie in korrekte Integer umwandeln (oder wie solche behandeln).