3 ms·
Not all implementations of snprintf behave the same way. Many are subtly broken. Some don't nul terminate the string if it's longer than the destination buffer
by vardump 11y ago
Not all implementations of snprintf behave the same way. Many are subtly broken.
Some don't nul terminate the string if it's longer than the destination buffer.
Also the return value can be -1 (correct behavior on failure, but it's often left unchecked) or more than destination buffer size! Fun times if you accumulate total written without range checking snprintf return value...
- vardump 11y agoTo add, notably this: _snprintf, _snprintf_l, _snwprintf, _snwprintf_l -> https://msdn.microsoft.com/en-us/library/2ts7cx93.aspx https://msdn.microsoft.com/en-us/library/2ts7cx93.aspx "If len > count, count characters are stored in buffer, no null-terminator is appended, and a negative value is returned." Uh, what? I guess that's why it is _snprintf and not snprintf, huh? They do provide secure [1] versions too, but you need to be careful which one you pick. Those secure versions terminate execution in some cases if buffer length is exceeded. [1]: https://msdn.microsoft.com/en-us/library/f30dzcf6.aspx https://msdn.microsoft.com/en-us/library/f30dzcf6.aspx - better remember that _TRUNCATE flag.