C ++ snprintf () - Bibliothèque standard C ++

La fonction snprintf () en C ++ est utilisée pour écrire une chaîne formatée dans le tampon de chaîne de caractères.

Contrairement à sprintf (), le nombre maximum de caractères pouvant être écrits dans le tampon est spécifié dans snprintf().

prototype snprintf ()

 int snprintf (char * buffer, size_t buf_size, const char * format,…);

La snprintf()fonction écrit la chaîne pointée par format dans la mémoire tampon. Le nombre maximum de caractères pouvant être écrits est de (buf_size-1).

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.

Il est défini dans le fichier d'en-tête.

Paramètres snprintf ()

  • buffer: pointeur vers le buffer de chaîne pour écrire le résultat.
  • buf_size: Spécifiez le nombre maximum de caractères à écrire dans le tampon qui est buf_size-1.
  • 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

  • …: Autres arguments supplémentaires spécifiant les données à imprimer. Ils se produisent dans une séquence selon le spécificateur de format.

snprintf () Valeur de retour

En cas de succès, la snprintf()fonction renvoie le nombre de caractères qui auraient été écrits pour un tampon suffisamment grand à l'exclusion du caractère nul de fin. En cas d'échec, il renvoie une valeur négative.

La sortie est considérée comme écrite complètement si et seulement si la valeur renvoyée est non négative et inférieure à buf_size.

Exemple: fonctionnement de la fonction snprintf ()

 #include #include using namespace std; int main() ( char buffer(100); int retVal, buf_size = 100; char name() = "Max"; int age = 23; retVal = snprintf(buffer, buf_size, "Hi, I am %s and I am %d years old", name, age); if (retVal> 0 && retVal < buf_size) ( cout << buffer << endl; cout << "Number of characters written = " << retVal << endl; ) else cout << "Error writing to buffer" << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 Bonjour, je suis Max et j'ai 23 ans Nombre de caractères écrits = 34

Articles intéressants...