La fonction vsnprintf () en C ++ est utilisée pour écrire une chaîne formatée dans un tampon de chaîne.
Contrairement à vsprintf (), le nombre maximum de caractères pouvant être écrits dans le tampon est spécifié dans vsnprintf()
.
prototype vsnprintf ()
int vsnprintf (char * buffer, size_t buf_size, const char * format, va_list vlist);
La vsnprintf()
fonction écrit la chaîne pointée par format dans un tampon de chaîne de caractères. Le nombre maximum de caractères pouvant être écrits est buf_size. Une fois les caractères écrits, un caractère nul de fin est ajouté. Si buf_size est égal à zéro, rien n'est écrit et le tampon peut être un pointeur nul.
Le format de chaîne peut contenir des spécificateurs de format commençant par% qui sont remplacés par les valeurs des variables qui sont passées sous forme de liste vlist.
Il est défini dans le fichier d'en-tête.
Paramètres de vsnprintf ()
- buffer: pointeur vers une chaîne de caractères pour écrire le résultat.
- buf_size: nombre maximum de caractères à écrire.
- format: pointeur vers une chaîne terminée par null qui est écrite dans le flux de fichiers. Il se compose de caractères avec des spécificateurs de format facultatifs commençant par%.
Les spécificateurs de format sont remplacés par les valeurs des variables respectives qui suivent la chaîne de format.
Le spécificateur de format comprend les parties suivantes:
- Un signe% en tête
- Indicateurs: un ou plusieurs indicateurs facultatifs qui modifient le comportement de conversion.
- -: Justifiez à gauche le résultat dans le champ. Par défaut, il est justifié à droite.
- +: Le signe du résultat est attaché au début de la valeur, même pour les résultats positifs.
- Espace: s'il n'y a pas de signe, un espace est attaché au début du résultat.
- #: Une autre forme de conversion est effectuée.
- 0: Il est utilisé pour les nombres entiers et flottants. Les zéros non significatifs sont utilisés pour compléter les nombres au lieu de l'espace.
- Largeur: valeur facultative * ou entière utilisée pour spécifier le champ de largeur minimale.
- Précision: un champ facultatif composé d'un. suivi de * ou entier ou rien pour spécifier la précision.
- Longueur: un modificateur de longueur facultatif qui spécifie la taille de l'argument.
- Spécificateur: spécificateur de format de conversion. Les spécificateurs de format disponibles sont les suivants:
Spécificateur de format La description % Impressions% c Écrit un seul caractère s Écrit une chaîne de caractères d ou i Convertit un entier signé en représentation décimale o Convertit un entier non signé en représentation octale X ou x Convertit un entier non signé en représentation hexadécimale u Convertit un entier non signé en représentation décimale F ou f Convertit un nombre à virgule flottante en représentation décimale E ou e Convertit un nombre à virgule flottante en notation d'exposant décimal A ou a Convertit un nombre à virgule flottante en exposant hexadécimal G ou g Convertit un nombre à virgule flottante en notation d'exposant décimal ou décimal n Renvoie le nombre de caractères écrits jusqu'à présent par cet appel à la fonction. Le résultat est écrit sur la valeur pointée par l'argument p Écrit une séquence de caractères définie par l'implémentation définissant un pointeur. Ainsi, le format général du spécificateur de format est:
%(flags)(width)(.precision)(length)specifier
- vlist: une liste d'arguments contenant les données à écrire.
vsnprintf () Valeur de retour
- En cas de succès, la
vsnprintf()
fonction renvoie le nombre de caractères écrits. - En cas d'échec, il renvoie une valeur négative.
- Lorsque la longueur de la chaîne formatée est supérieure à buf_size, elle doit être tronquée. Dans ce cas, la
vsnprintf()
fonction renvoie le nombre total de caractères à l'exclusion du caractère nul de fin qui aurait été écrit si la limite buf_size n'était pas imposée.
Exemple: fonctionnement de la fonction vsnprintf ()
#include #include void write(char* buf, int buf_size, const char *fmt,… ) ( va_list args; va_start(args, fmt); vsnprintf(buf, buf_size, fmt, args); va_end(args); ) int main () ( char buffer(100); char fname(20) = "Bjarne"; char lname(20) = "Stroustrup"; char lang(5) = "C++"; write(buffer, 27, "%s was created by %s %s", lang, fname, lname); printf("%s", buffer); return 0; )
Lorsque vous exécutez le programme, la sortie sera:
C ++ a été créé par Bjarne