Can I measure the necessary buffer for sprintf in Microsoft C++?
buffer, c, c++, printf
Solution
You want _snwprintf. That function takes a buffer size, and if the buffer isn't big enough, just double the size of the buffer and try again. To keep from having to do multiple _snwprintf calls each time, keep track of what the buffer size was that you ended up using last time, and always start there. You'll make a few excess calls here and there, and you'll waste a bit of ram now and then, but it works great, and can't over-run anything.
Problem
I'm writing a small proof-of-concept console program with Visual Studio 2008 and I wanted it to output colored text for readability. For ease of coding I also wanted to make a quick printf-replacement, something where I could write like this: ``` MyPrintf(L"Some text \1[bright red]goes here\1[default]. %d", 21); ``` This will be useful because I also build and pass strings around in some places so my strings will be able to contain formatting info. However I hit a wall against `wsprintf` because I can't find a function that would allow me to find out the required buffer size before passing it to the function. I could, of course, allocate 1MB just-to-be-sure, but that wouldn't be pretty and I'd rather leave that as a backup solution if I can't find a better way. Also, alternatively I'm considering using `std::wstring` (I'm actually more of a C guy with little C++ experience so I find plain-old-char-arrays easier for now), but that doesn't have anything like `wsprintf` where you could build a string with values replaced in them. So... what should I do?