Concaténer les chaînes de caractères en C
-
Utiliser les fonctions
strcat
etstrcpy
pour concaténer des chaînes de caractères en C -
Utiliser la fonction
memccpy
pour concaténer des chaînes de caractères en C - Utiliser la fonction définie sur mesure pour concaténer des chaînes de caractères littérales en C
Cet article explique plusieurs méthodes de concaténation des chaînes de caractères en C.
Utiliser les fonctions strcat
et strcpy
pour concaténer des chaînes de caractères en C
Strcat fait partie de la bibliothèque C standard de chaînes de caractères définie dans l’en-tête <string.h>
. La fonction prend deux arguments char*
et ajoute la chaîne stockée au second pointeur à celle du premier pointeur. Comme les chaînes de style C se terminent par le caractère \0
, strcat
commence à s’ajouter à la chaîne de destination en commençant par le caractère nul. Enfin, la fin d’une chaîne nouvellement construite se termine par le caractère \0
. Notez que le programmeur est responsable de l’allocation de la mémoire suffisante au pointeur de destination pour stocker les deux chaînes de caractères.
La seconde fonction à utiliser dans cette solution est strcpy
, qui prend de la même façon deux paramètres char*
et copie la chaîne au second pointeur vers le premier pointeur. Notez que strcpy
est utilisé pour copier la première chaîne dans le tampon char
désigné et ensuite passer le pointeur de destination à la fonction strcat
.
Les deux fonctions renvoient le pointeur à la chaîne de caractères de destination, et cela rend possible les appels de chaînage.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main() {
const char* str1 = "hello there 1";
const char* str2 = "hello there 2";
char buffer[MAX];
strcat(strcpy(buffer, str1), str2);
printf("%s\n", buffer);
char buffer2[MAX];
strcat(strcpy(buffer2, "Hello there, "), "Josh");
strcat(buffer2, "!\nTemporary...");
printf("%s\n", buffer2);
exit(EXIT_SUCCESS);
}
Production :
hello there 1hello there 2
Hello there, Josh!
Temporary...
Utiliser la fonction memccpy
pour concaténer des chaînes de caractères en C
Le plus gros inconvénient de la méthode précédente est son implémentation inefficace qui effectue des itérations redondantes sur la première chaîne stockée par la fonction strcpy
.
La fonction memccpy
, en revanche, corrige ce problème et traite les deux chaînes de manière efficace. memccpy ne copie pas plus que le nombre d’octets spécifié par l’utilisateur depuis le char*
source vers le pointeur de destination, s’arrêtant seulement lorsque le caractère donné est trouvé dans la chaîne source. memccpy
renvoie le pointeur au dernier caractère stocké dans le tampon de destination. Ainsi, deux appels memccpy
peuvent être enchaînés de façon similaire à la méthode précédente. La première chaîne est copiée par l’utilisateur dans le tampon pré-alloué, et la seconde chaîne est ajoutée au pointeur renvoyé par le premier appel à memccpy
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
int main() {
const char* str1 = "hello there 1";
const char* str2 = "hello there 2";
char buffer[MAX];
memccpy(memccpy(buffer, str1, '\0', MAX) - 1, str2, '\0', MAX);
exit(EXIT_SUCCESS);
}
Production :
hello there 1hello there 2
Utiliser la fonction définie sur mesure pour concaténer des chaînes de caractères littérales en C
Alternativement, si le memccpy
n’est pas disponible sur votre plate-forme, vous pouvez définir une fonction personnalisée mettant en œuvre la même routine. concatStrings
est l’exemple d’implémentation qui copie un caractère d’un pointeur à un autre jusqu’à ce que le caractère spécifié soit trouvé. Notez que nous spécifions l’octet nul \0
comme caractère d’arrêt dans les deux exemples.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef MAX
#define MAX 100
#endif
void* concatStrings(void* restrict dst, const void* restrict src, int c,
size_t n) {
const char* s = src;
for (char* ret = dst; n; ++ret, ++s, --n) {
*ret = *s;
if ((unsigned char)*ret == (unsigned char)c) return ret + 1;
}
return 0;
}
int main() {
const char* str1 = "hello there 1";
const char* str2 = "hello there 2";
char buffer[MAX];
concatStrings(concatStrings(buffer, str1, '\0', MAX) - 1, str2, '\0', MAX);
printf("%s\n", buffer);
exit(EXIT_SUCCESS);
}
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