The attached programs demonstrate three problems in the (v)snprintf routines.
First %p uses p as the second digit and displays as lower case. Other printf routines have a 0 for the second digit and display as upper case. This causes problems when you are using the address as the object identity. See the snprintf code for a complete example.
Next when using the %*.* syntax for %f the output is completely wrong. For %e and %g the output has something that looks correct. The field width and precision are given as -1, -1. This should read as a left justified minimum field width of 1 and default precision.
The last problem is that minus infinity is displayed as positive infinity.
It would also be nice if NaN and infinity were displayed using the more standard nan and inf instead of NaN and Infinity. This allows automatic comparisons against the output from other machines.