Verkettung von String und Int in C
-
Verwenden Sie die Funktionen
asprintf
,strcat
undstrcpy
zur Verkettung von String und Int in C -
Verwenden der Funktionen
asprintf
undmemccpy
zum Verketten von String und Int in C
In diesem Artikel werden mehrere Methoden zur Verkettung von string
und int
in C demonstriert.
Verwenden Sie die Funktionen asprintf
, strcat
und strcpy
zur Verkettung von String und Int in C
Der erste Schritt zur Verkettung der Variablen int
und der Zeichenkette ist die Umwandlung einer Ganzzahl in eine Zeichenkette. Wir verwenden die Funktion asprintf
, um den übergebenen Integer als Zeichenkette zu speichern. Die Funktion asprintf
ist Teil der GNU C-Bibliothekserweiterung und ist möglicherweise in anderen Implementierungen nicht verfügbar. Sie arbeitet ähnlich wie sprintf
, mit dem Unterschied, dass der Ziel-Zeichenkettenpuffer intern dynamisch mit dem Funktionsaufruf malloc
allokiert wird und der zurückgegebene Zeiger vor dem Programmende freigegeben werden sollte. Sobald der Integer konvertiert ist, verketten wir strcpy
- und strcat
-Aufrufe, um zwei gegebene Zeichenketten in dem vom Benutzer zugewiesenen Puffer zu konkatenieren. In diesem Fall haben wir das Makro MAX
willkürlich definiert, um die Größe des Zielpuffers zu bezeichnen, aber in realen Szenarien wäre es flexibler, malloc
zu verwenden.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main(int argc, char *argv[]) {
const char *str1 = "hello there";
int n1 = 1234;
char *num;
char buffer[MAX];
if (asprintf(&num, "%d", n1) == -1) {
perror("asprintf");
} else {
strcat(strcpy(buffer, str1), num);
printf("%s\n", buffer);
free(num);
}
exit(EXIT_SUCCESS);
}
Ausgabe:
hello there1234
Alternativ kann nach den verketteten Aufrufen ein weiterer Aufruf der Funktion strcat
folgen und weitere Zeichenketten an den angegebenen char
-Puffer anhängen. Beachten Sie, dass wir die Funktion asprintf
auf den erfolgreichen Rückgabewert überprüfen und wenn dieser fehlschlägt, dann fahren wir mit dem Verkettungsprozess fort.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main(int argc, char *argv[]) {
const char *str1 = "hello there";
int n1 = 1234;
char *num;
char buffer[MAX];
if (asprintf(&num, "%d", n1) == -1) {
perror("asprintf");
} else {
strcat(strcpy(buffer, "Hello there, "), num);
strcat(buffer, "! continued");
printf("%s\n", buffer);
free(num);
}
exit(EXIT_SUCCESS);
}
Ausgabe:
Hello there, 1234! continued
Verwenden der Funktionen asprintf
und memccpy
zum Verketten von String und Int in C
Alternativ kann asprintf
in Verbindung mit memccpy
verwendet werden, um Zeichenketten und int
zu verketten. memccpy
ist Teil der C-Standardbibliothek für Zeichenketten, die in der Header-Datei <string.h>
definiert ist. Es nimmt zwei Zeiger entgegen, die den Quell- und Zielpuffer bezeichnen. Beachten Sie, dass sich diese Pufferspeicherbereiche nicht überlappen dürfen, sonst sind die Ergebnisse undefiniert. Die letzten beiden Argumente stellen das Zeichen dar, bei dem das Kopieren gestoppt werden soll, und die maximale Anzahl von Bytes, die von der Quellposition genommen werden sollen. Wir rufen die Funktion free
im Bereich else
auf, da wir sonst nicht sicher sein können, dass der Zeiger num
der gültige Zeiger ist.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main(int argc, char *argv[]) {
const char *str1 = "hello there";
int n1 = 1234;
char *num;
char buffer[MAX];
if (asprintf(&num, "%d", n1) == -1) {
perror("asprintf");
} else {
memccpy(memccpy(buffer, str1, '\0', MAX) - 1, num, '\0', MAX);
printf("%s\n", buffer);
free(num);
}
exit(EXIT_SUCCESS);
}
Ausgabe:
hello there1234
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook