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:
Zitat Zitat
Der Bereich einer Aufzählung umfaßt alle seine Enumeratoren aufgerundet auf die nächstgrößere Zweierpotenz minus eins. Der Bereich geht herunter bis null, falls der kleinste Enumerator nicht negativ ist, und bis zur nächstkleineren Zweierpotenz plus eins sonst. Dadurch wird das kleinste Bitfeld, das die Werte der Enumeratoren speichern kann, definiert.
Aus: "Die C++-Programmiersprache" von Bjarne Stroustrup, 3. Auflage
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.
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).