C ++ snprintf () - C ++ Standardbibliothek

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

Im Gegensatz zu sprintf () ist die maximale Anzahl von Zeichen angegeben, die in den Puffer geschrieben werden können snprintf().

snprintf () Prototyp

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

Die snprintf()Funktion schreibt die Zeichenfolge, auf die das Format zeigt, in den Puffer. Die maximale Anzahl von Zeichen, die geschrieben werden können, beträgt (buf_size-1).

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.

Es ist in der Header-Datei definiert.

snprintf () Parameter

  • buffer: Zeiger auf den String-Puffer, um das Ergebnis zu schreiben.
  • buf_size: Geben Sie die maximale Anzahl von Zeichen an, die in den Puffer geschrieben werden sollen. Dies ist buf_size-1.
  • 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

  • …: Andere zusätzliche Argumente, die die zu druckenden Daten angeben. Sie treten in einer Reihenfolge gemäß dem Formatbezeichner auf.

snprintf () Rückgabewert

Bei Erfolg gibt die snprintf()Funktion die Anzahl der Zeichen zurück, die für einen ausreichend großen Puffer ohne das abschließende Nullzeichen geschrieben worden wären. Bei einem Fehler wird ein negativer Wert zurückgegeben.

Die Ausgabe gilt genau dann als vollständig geschrieben, wenn der zurückgegebene Wert nicht negativ und kleiner als buf_size ist.

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

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

 Hallo, ich bin Max und ich bin 23 Jahre alt. Anzahl der geschriebenen Zeichen = 34

Interessante Beiträge...