Partager via


vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l

Entrez la sortie mise en forme à l'aide d'un pointeur vers une liste d'arguments.Ce sont des versions de vsnprintf, _vsnprintf, _vsnprintf_l, _vsnwprintf, _vsnwprintf_l avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du CRT.

int vsnprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   va_list argptr 
);
int _vsnprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const char *format,
   locale_t locale,
   va_list argptr 
);
int _vsnwprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const wchar_t *format,
   va_list argptr 
);
int _vsnwprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   size_t count,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);
template <size_t size>
int _vsnprintf_s(
   char (&buffer)[size],
   size_t count,
   const char *format,
   va_list argptr 
); // C++ only
template <size_t size>
int _vsnwprintf_s(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   va_list argptr 
); // C++ only

Paramètres

  • buffer
    emplacement de stockage pour la sortie.

  • sizeOfBuffer
    la taille d' buffer pour la sortie, en octets.

  • count
    Nombre maximal de caractères à écrire (sans caractère null de fin), ou _TRUNCATE.

  • format
    Spécification de format.

  • argptr
    Pointeur vers la liste d'arguments.

  • locale
    Les paramètres régionaux à utiliser.

Pour plus d'informations, consultez Spécifications de format.

Valeur de retour

vsnprintf_s,_vsnprintf_set _vsnwprintf_sretournent le nombre de caractères entrés, sans caractère null de fin, ou une valeur négative si une erreur de sortie se produit.vsnprintf_s identique à _vsnprintf_s.vsnprintf_s est inclus pour la conformité à la norme ANSI._vnsprintf est conservé pour la compatibilité descendante.

Si le stockage requis pour stocker les données et null de fin dépasse sizeOfBuffer, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres, à moins qu' count soit _TRUNCATE, dans ce cas autant de la chaîne que tient dans buffer est écrit et -1 retourné.Si l'exécution reprend après le gestionnaire de paramètre non valide, ces fonctions définissent buffer à une chaîne vide, définissent errno à ERANGE, et retournent -1.

si buffer ou format est un pointeur d' NULL , ou si count est inférieur ou égal à zéro, le gestionnaire de paramètre non valide est appelé.Si est autorisé à l'exécution de se poursuivre, ces errno défini par fonctions à EINVAL et à retourner -1.

conditions d'erreur

Condition

Return

errno

buffer estNULL

-1

EINVAL

format estNULL

-1

EINVAL

count <= 0

-1

EINVAL

sizeOfBuffer trop petit (et count ! = _TRUNCATE)

-1 (et buffer défini sur une chaîne vide)

ERANGE

Notes

Chacune de ces fonctions prend un pointeur vers une liste d'arguments, puis les formats et prêt à count les caractères des données données dans la mémoire désignée par buffer et ajoute un caractère null de fin.

Si count est _TRUNCATE, l'écriture de ces fonctions autant de la chaîne que tient dans buffer tout en quittant la place pour null de fin.Si les ajustements entiers de chaîne (avec fin null) dans buffer, ces fonctions retourne le nombre de caractères entrés (sans caractère null de fin) ; sinon, ces fonctions retournent -1 pour indiquer que la troncation s'est produite.

Les versions de ces fonctions par le suffixe d' _l sont identiques mais elles utilisent le paramètre de paramètres régionaux passé au lieu des paramètres régionaux du thread courant.

Note de sécuritéNote de sécurité

assurez-vous qu' format n'est pas une chaîne définie par l'utilisateur.Pour plus d'informations, consultez Solutions contre les dépassements de mémoire tampon.

[!REMARQUE]

Pour vous assurer qu'il existe place pour un caractère null de fin, assurez -vous que count est strictement inférieure à la longueur de la mémoire tampon, ou utilisez _TRUNCATE.

En C++, à l'aide de ces fonctions est simplifié par des surcharges de modèle ; les surcharges peuvent également déduire la longueur de la mémoire tampon automatiquement (en éliminant le besoin de spécifier un argument de taille) et peuvent remplacer automatiquement des fonctions plus anciennes et non sécurisées par leurs nouvelles, sécurisées équivalents.Pour plus d'informations, consultez Surcharges sécurisées de modèle.

mappages de routines de texte générique

routine de TCHAR.H

_MBCS & de _UNICODE non défini

_MBCS défini

_UNICODE défini

_vsntprintf_s

_vsnprintf_s

_vsnprintf_s

_vsnwprintf_s

_vsntprintf_s_l

_vsnprintf_s_l

_vsnprintf_s_l

_vsnwprintf_s_l

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.

Configuration requise

routine

en-tête requis

en-têtes facultatifs

vsnprintf_s

<stdio.h> et <stdarg.h>

<varargs.h> *

_vsnprintf_s, _vsnprintf_s_l

<stdio.h> et <stdarg.h>

<varargs.h> *

_vsnwprintf_s, _vsnwprintf_s_l

<stdio.h> ou <wchar.h> , et <stdarg.h>

<varargs.h> *

* Requis pour la compatibilité UNIX V.

Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.

Exemple

// crt_vsnprintf_s.cpp
#include <stdio.h>
#include <wtypes.h>

void FormatOutput(LPCSTR formatstring, ...) 
{
   int nSize = 0;
   char buff[10];
   memset(buff, 0, sizeof(buff));
   va_list args;
   va_start(args, formatstring);
   nSize = vsnprintf_s( buff, sizeof(buff), _TRUNCATE, formatstring, args);
   printf("nSize: %d, buff: %s\n", nSize, buff);
}

int main() {
   FormatOutput("%s %s", "Hi", "there");
   FormatOutput("%s %s", "Hi", "there!");
   FormatOutput("%s %s", "Hi", "there!!");
}
  
  

Voir aussi

Référence

E/S de flux

fonctions de vprintf

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

va_arg ; va_end ; va_start