these functions take different arguments!
There are two different versions available with MS compilers. Take a look here.
This is in keeping with the ANSI standard. But I think that does not answer your question. I'll skip it for a while and rather tell you how you can have uniformity.
have them work with and without _UNICODE?
You are better off using the 'safe string functions' as per MS recommendations. See this. Use `_stprintf_s' and I think you will get around your problem.
Did somebody goof?
EDITED: I don't think so. I don't have the Rationale handy to give you the answer. I'll post an update when I get my hands on something more concrete. In the meantime look at MSalters' explanation.
A curious thing is MS's C runtime does not claim compatibility with the ISO standard.
Disclaimer: I am not defending the giant of Redmond, only pointing out stuff that strikes me as odd!