Erstellen formatierte Zeichenfolgen in C

Muhammad Husnain 12 Oktober 2023
  1. Erstellen Sie formatierte Strings mit der Funktion sprintf() in C
  2. Erstellen formatierte Strings mit der Funktion snprintf() in C
Erstellen formatierte Zeichenfolgen in C

Dieser Artikel beschreibt, wie man einen String mit der C-Sprache so formatiert, wie wir es in der Funktion printf() tun – zum Beispiel das Generieren eines Strings durch Kombinieren von String-Literalen und den Werten verschiedener Variablen und Zuweisen des Ergebnisses zu einem String Variable für die zukünftige Verwendung.

Die C-Sprache hat einige eingebaute Bibliotheksmethoden, die eine formatierte Zeichenfolge zurückgeben. Die beiden am häufigsten verwendeten Funktionen sind:

  1. sprintf()-Methode
  2. snprintf()-Methode

Wir werden diese beiden Funktionen und ihre Beispiele besprechen.

Erstellen Sie formatierte Strings mit der Funktion sprintf() in C

Der Prototyp von sprintf() sieht wie folgt aus:

int sprintf(char* str, const char* format, ...);

Der Inhalt des Strings wird als C-String in dem von str referenzierten Puffer gespeichert und nicht gedruckt, wenn das Format auf printf verwendet wurde. Die Puffergröße sollte groß genug sein, um die vollständige Ergebniszeichenfolge aufzunehmen.

Nach dem Inhalt wird automatisch ein Nullzeichen eingefügt.

Die Funktion erfordert mindestens so viele zusätzliche Argumente wie für eine exakte Eins-zu-Eins-Entsprechung mit den im zweiten Argument dieser Funktion verwendeten Formatbezeichnern erforderlich sind.

Parameter:

  • char * str

    Es ist ein Zeichenzeiger, wo die resultierende Zeichenfolge gespeichert wird. Die Größe dieses Zeigers sollte groß genug sein, um alle im Format angegebenen Daten zu berücksichtigen.

  • const char * format

    Es ist auch ein Zeichenzeiger, der das String-Format mit allen Spezifikationen enthält, die wir in der Funktion printf angeben.

  • ...

    Die Funktion erfordert möglicherweise eine Reihe zusätzlicher Argumente, von denen jedes einen Wert enthält, um einen Formatbezeichner in der Formatzeichenfolge zu ersetzen, abhängig von der Formatzeichenfolge (oder einem Zeiger auf einen Speicherort für n).

    Die Anzahl dieser Parameter sollte mindestens gleich der Anzahl der Werte sein, die in den Formatbezeichnern angegeben sind. Die Funktion ignoriert alle zusätzlichen Argumente.

Rückgabewert:

Diese Funktion gibt einen int-Wert zurück, der die Anzahl der Zeichen angibt, die in die resultierende Zeichenfolge geschrieben werden. Diese Anzahl von Zeichen enthält nicht das Nullzeichen, das automatisch am Ende der Zeichenfolge angehängt wird.

Im Falle eines Fehlers oder wenn nichts in diese Zeichenfolge geschrieben wird, wird eine negative Zahl zurückgegeben.

Beispiel:

#include <stdio.h>

int main() {
  char arr[60];
  int num, i = 4, j = 2;
  num = sprintf(arr, "%d plus %d is %d", i, j, i + j);
  printf("[%s] string is %d characters long\n", arr, num);
  return 0;
}

Die Ausgabe des obigen Codes ist:

[4 plus 2 is 6] string is 13 characters long

Im obigen Code-Snippet können Sie sehen, dass wir ein char-Array mit fester Größe deklariert haben. Dann haben wir dieses Array in der Funktion sprintf verwendet, um den Inhalt zu speichern.

Wenn beispielsweise der String format in der Funktion sprintf die Größe des angegebenen Arrays überschreitet, tritt ein Speicherfehler auf und das Programm wird abnormal beendet. Eine sicherere Version dieser Funktion wird verwendet, um diesen Ärger zu vermeiden, die Funktion snprintf.

Erstellen formatierte Strings mit der Funktion snprintf() in C

Der Prototyp dieser Funktion sieht wie folgt aus:

int snprintf(char* s, size_t n, const char* format, ...);

Der String-Inhalt wird als C-String im Puffer gespeichert, auf den s zeigt, anstatt gedruckt zu werden, wenn das Format auf printf verwendet wurde (wobei n als maximal zu füllende Pufferkapazität angenommen wird).

Ist in diesem Fall der resultierende String grösser als n-1, werden alle überzähligen Restzeichen für den String verworfen, aber für die Anzahl der Zeichen im Rückgabewert mitgezählt.

Nachdem das Material geschrieben ist, wird automatisch ein Nullzeichen angehängt.

Die Funktion benötigt mindestens so viele zusätzliche Argumente wie für format nach dem Parameter format erforderlich sind.

Parameter:

  • char * s

    Es ist ein Zeichenzeiger zum Speichern der resultierenden Zeichenfolgeninhalte. Die Größe dieses Arrays sollte mindestens n Zeichen lang sein.

  • size_t n

    Es ist ein ganzzahliger Typ ohne Vorzeichen, der die maximale Anzahl von Zeichen angibt, die in den Puffer geschrieben werden sollen. Die maximale Anzahl an Zeichen, die geschrieben werden kann, ist n-1, wobei ein Zeichen für das am Ende der Zeichenfolge angehängte Nullzeichen übrig bleibt.

  • const char * format

    Es ist auch ein Zeichenzeiger, der das String-Format mit allen Spezifikationen enthält, die wir in der Funktion printf angeben.

  • ...

    Die Funktion erfordert möglicherweise eine Reihe zusätzlicher Argumente, von denen jedes einen Wert enthält, um einen Formatbezeichner in der Formatzeichenfolge zu ersetzen, abhängig von der Formatzeichenfolge (oder einem Zeiger auf einen Speicherort für n).

    Die Anzahl dieser Parameter sollte mindestens gleich der Anzahl der Werte sein, die in den Formatbezeichnern angegeben sind. Die Funktion ignoriert alle zusätzlichen Argumente.

Rückgabewert:

Diese Funktion gibt die Anzahl der erfolgreich in den Puffer geschriebenen Zeichen ohne das abschließende Nullzeichen zurück. Im Fehlerfall wird eine negative Zahl zurückgegeben.

Beachten Sie, dass die Zeichenfolge vollständig geschrieben wird, wenn der zurückgegebene Wert größer als 0 und kleiner als die angegebene Puffergröße ist.

Beispiel:

#include <stdio.h>

int main() {
  char arr[100];
  int count;

  count = snprintf(arr, 100, "The double of %d is %d", 5, 5 * 2);

  if (count >= 0 && count < 100)  // check returned value
    printf("The resultant string is: %s", arr);
  else
    printf("Not successfully written");
  return 0;
}

Ausgang:

The resultant string is: The double of 5 is 10
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Verwandter Artikel - C String