Selon la norme, à moins que la taille de la mémoire tampon est de 0, vsnprintf()
et snprintf()
null met fin à sa sortie.
L' snprintf()
fonction est équivalent à sprintf()
, avec l'ajout de la n de l'argument qui indique la taille de la mémoire tampon visées par s. Si n est égal à zéro, rien ne doit être écrit et s peut être un pointeur null. Sinon, les octets de sortie au-delà de la n-1er doit être éliminé au lieu d'être écrit au tableau, et un octet nul est écrit à la fin des octets effectivement écrits dans le tableau.
Donc, si vous avez besoin de savoir comment grand d'un tampon d'allouer, utiliser une taille de zéro, et vous pouvez alors utiliser un pointeur null en tant que destination. Note que j'ai relié à la POSIX pages, mais ces explicitement dire qu'il n'est pas destiné à être toute divergence entre la Norme C et POSIX où elles couvrent le sol même:
La fonctionnalité décrite sur cette page de référence est aligné avec le C ISO standard. Tout conflit entre les exigences décrites ici et le standard ISO C est involontaire. Ce volume de POSIX.1-2008 date diffère de la norme ISO C standard.
Méfiez-vous de la version Microsoft de vsnprintf()
. C'est très certainement se comporte différemment de la norme C version quand il n'y a pas assez d'espace dans la mémoire tampon (elle renvoie -1 si la fonction retourne la longueur requise). Il n'est pas tout à fait clair que la version de Microsoft null met fin à sa sortie en cas d'erreur, alors que le standard C version ne.
Notez également les réponses à Faire, vous utilisez le TR 24731 les fonctions de sécurité? (voir MSDN pour la version Microsoft de l' vsprintf_s()
) et Mac solution pour la sécurité des solutions de rechange à la contamination des fonctions de la bibliothèque C standard?