C ++ vsnprintf () - C ++ Standardbibliothek

Die Funktion vsnprintf () in C ++ wird verwendet, um eine formatierte Zeichenfolge in einen Zeichenfolgenpuffer zu schreiben.

Im Gegensatz zu vsprintf () wird die maximale Anzahl von Zeichen angegeben, die in den Puffer geschrieben werden können vsnprintf().

vsnprintf () Prototyp

 int vsnprintf (char * buffer, size_t buf_size, const char * format, va_list vlist);

Die vsnprintf()Funktion schreibt die Zeichenfolge, auf die das Format zeigt, in einen Zeichenfolgenpuffer. Die maximale Anzahl von Zeichen, die geschrieben werden können, ist buf_size. Nachdem die Zeichen geschrieben wurden, wird ein abschließendes Nullzeichen hinzugefügt. Wenn buf_size gleich Null ist, wird nichts geschrieben und der Puffer kann ein Nullzeiger sein.

Das Zeichenfolgenformat kann Formatspezifizierer enthalten, die mit% beginnen und durch die Werte von Variablen ersetzt werden, die als Listen-vlist übergeben werden.

Es ist in der Header-Datei definiert.

vsnprintf () Parameter

  • buffer: Zeiger auf eine Zeichenfolge, um das Ergebnis zu schreiben.
  • buf_size: Maximale Anzahl der zu schreibenden Zeichen.
  • Format: Zeiger auf eine nullterminierte Zeichenfolge, die in den Dateistream geschrieben wird. Es besteht aus Zeichen und optionalen Formatangaben, die mit% beginnen.

    Die Formatbezeichner werden durch die Werte der jeweiligen Variablen ersetzt, die auf die Formatzeichenfolge folgen.

    Der Formatbezeichner besteht aus folgenden Teilen:

    • Ein führendes% -Zeichen
    • Flags: Optional ein oder mehrere Flags, die das Konvertierungsverhalten ändern.
      • -: Links begründen Sie das Ergebnis innerhalb des Feldes. Standardmäßig ist es richtig gerechtfertigt.
      • +: Das Vorzeichen des Ergebnisses wird auch bei positiven Ergebnissen an den Anfang des Wertes angehängt.
      • Leerzeichen: Wenn kein Zeichen vorhanden ist, wird am Anfang des Ergebnisses ein Leerzeichen eingefügt.
      • #: Eine alternative Form der Konvertierung wird durchgeführt.
      • 0: Wird für Ganzzahl und Gleitkommazahl verwendet. Führende Nullen werden verwendet, um die Zahlen anstelle von Leerzeichen aufzufüllen.
    • Breite: Ein optionaler * oder ganzzahliger Wert, mit dem das Feld für die Mindestbreite angegeben wird.
    • Präzision: Ein optionales Feld bestehend aus a. gefolgt von * oder Ganzzahl oder nichts, um die Genauigkeit anzugeben.
    • Länge: Ein optionaler Längenmodifikator, der die Größe des Arguments angibt.
    • Bezeichner: Ein Bezeichner für das Konvertierungsformat. Die verfügbaren Formatspezifizierer sind wie folgt:
      Formatbezeichner Beschreibung
      %. Druckt%
      c Schreibt ein einzelnes Zeichen
      s Schreibt eine Zeichenkette
      d oder i Konvertiert eine vorzeichenbehaftete Ganzzahl in eine Dezimaldarstellung
      Ö Konvertiert eine vorzeichenlose Ganzzahl in eine oktale Darstellung
      X oder x Konvertiert eine vorzeichenlose Ganzzahl in eine hexadezimale Darstellung
      u Konvertiert eine vorzeichenlose Ganzzahl in eine Dezimaldarstellung
      F oder f Konvertiert die Gleitkommazahl in die Dezimaldarstellung
      E oder e Konvertiert die Gleitkommazahl in die Dezimal-Exponenten-Notation
      A oder a Konvertiert die Gleitkommazahl in den hexadezimalen Exponenten
      G oder g Konvertiert die Gleitkommazahl entweder in eine dezimale oder eine dezimale Exponentennotation
      n Gibt die Anzahl der Zeichen zurück, die bisher von diesem Aufruf an die Funktion geschrieben wurden. Das Ergebnis wird auf den Wert geschrieben, auf den das Argument zeigt
      p Schreibt eine implementierungsdefinierte Zeichenfolge, die einen Zeiger definiert.

      Das allgemeine Format des Formatbezeichners lautet also: %(flags)(width)(.precision)(length)specifier

  • vlist: Eine Liste von Argumenten, die die zu schreibenden Daten enthalten.

vsnprintf () Rückgabewert

  • Bei Erfolg gibt die vsnprintf()Funktion die Anzahl der geschriebenen Zeichen zurück.
  • Bei einem Fehler wird ein negativer Wert zurückgegeben.
  • Wenn die Länge der formatierten Zeichenfolge größer als buf_size ist, muss sie abgeschnitten werden. In solchen Fällen gibt die vsnprintf()Funktion die Gesamtzahl der Zeichen ohne das abschließende Nullzeichen zurück, das geschrieben worden wäre, wenn das Limit für buf_size nicht festgelegt worden wäre.

Beispiel: Funktionsweise der Funktion 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; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 C ++ wurde von Bjarne erstellt 

Interessante Beiträge...