Erstellen formatierte Zeichenfolgen in C
-
Erstellen Sie formatierte Strings mit der Funktion
sprintf()
in C -
Erstellen formatierte Strings mit der Funktion
snprintf()
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:
sprintf()
-Methodesnprintf()
-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
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