Concaténer la chaîne et l'Int en C

Jinku Hu 12 octobre 2023
  1. Utilisez les fonctions asprintf, strcat et strcpy pour concaténer la chaîne et l’int en C
  2. Utilisez les fonctions asprintf et memccpy pour concaténer les chaînes de caractères et Int en C
Concaténer la chaîne et l'Int en C

Cet article présente plusieurs méthodes de concaténation de string et int en C.

Utilisez les fonctions asprintf, strcat et strcpy pour concaténer la chaîne et l’int en C

La première étape pour concaténer la variable int et la chaîne de caractères est de convertir un entier en chaîne. Nous utilisons la fonction asprintf pour stocker l’entier passé sous forme de chaîne de caractères. La fonction asprintf fait partie de l’extension de la bibliothèque C de GNU et peut ne pas être disponible dans d’autres implémentations. Il fonctionne de manière similaire à sprintf sauf que le tampon de la chaîne de caractères de destination est alloué dynamiquement en utilisant l’appel interne de la fonction malloc, et le pointeur retourné doit être libéré avant la sortie du programme. Une fois que l’entier est converti, nous enchaînons les appels strcpy et strcat pour concaténer deux chaînes de caractères données dans le tampon que l’utilisateur alloue. Dans ce cas, nous avons arbitrairement défini une macro MAX pour indiquer la taille du tampon de destination, mais dans des scénarios réels, il serait plus souple d’utiliser malloc.

#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);
}

Production :

hello there1234

Alternativement, les appels enchaînés peuvent être suivis par une autre invocation de la fonction strcat et ajouter d’autres chaînes de caractères au tampon char donné. Notez que nous vérifions la valeur de retour de la fonction asprintf, et si elle échoue, alors nous continuons avec le processus de concaténation.

#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);
}

Production :

Hello there, 1234! continued

Utilisez les fonctions asprintf et memccpy pour concaténer les chaînes de caractères et Int en C

Alternativement, asprintf peut être utilisé en conjonction avec memccpy pour concaténer une chaîne de caractères, et int. memccpy fait partie des utilitaires de chaînes de caractères de la bibliothèque standard C définis dans le fichier d’en-tête <string.h>. Il prend deux pointeurs indiquant les tampons source et destination. Notez que ces zones de mémoire tampon ne doivent pas se chevaucher ; sinon, les résultats sont indéfinis. Les deux derniers arguments représentent le caractère auquel arrêter la copie et le nombre maximum d’octets à prendre à l’emplacement source. Nous appelons la fonction free dans la portée else car sinon, nous ne pouvons pas être sûrs que le pointeur num est le pointeur valide.

#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);
}

Production :

hello there1234
Auteur: 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

Article connexe - C String