That's true, but I don't think it's relevant here.
Both printf and puts will set errno when there is an error writing to stdout. The man pages (at least the ones I have installed) are oddly silent about this topic. However, once you realize that both of these functions just turn around and call write() eventually, and write() sets errno, the behavior becomes clear.
tl;dr: errno is a pretty crazy interface, but it's not really a problem here