Verkettung von String und Int in C

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktionen asprintf, strcat und strcpy zur Verkettung von String und Int in C
  2. Verwenden der Funktionen asprintf und memccpy zum Verketten von String und Int in C
Verkettung 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C String