Concatènation de char

Résolu
nord666 Messages postés 20 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 29 juin 2008 - 12 mai 2008 à 23:43
nord666 Messages postés 20 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 29 juin 2008 - 13 mai 2008 à 19:57
Salut,

J'aimerais pouvoir concatèner des char. Voici ce que je veux faire :

<hr />int i = 0; //Peut être variable. Ce n'est que pour l'exemple
char * charConcat = "Personne #" + (i ± '0'); //Il y a un ± car je ne me rappele plus lequel il faut utiliser pour transformer un int en char.
<hr />
Je voudrais que dans charConcat  il y est la chaîne "Personne #0".

Ps.: Certains me conseilleront d'utiliser la librairy String mais je ne peut pas l'utiliser.

Merci à tous!
A voir également:

7 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
12 mai 2008 à 23:50
Salut
Essaye plutot la fonction strcat.
Si tu veux pouvoir utiliser la concaténation avec le +, il faux que tu utilises la classe CString.

A+
Mon site internet : http://pistol.petesampras.free.fr
3
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
13 mai 2008 à 02:26
Bonsoir,

Les fonctions de traitement de chaînes de caractères str???() ne fonctionnent qu'avec des chaînes de caractères ! Une chaîne de caractères est un tableau de caractères contenant les caractères de la chaîne suivis d'un zéro binaire (le terminateur) ! Il est donc hors de question de concaténer un caractère avec la fonction strcat() (il n'y a pas ce terminateur derrière le caractère et donc strcat() va concaténer jusqu'à ce qu'elle en rencontre un en mémoire).

Il y a 3 possibilités sans passer par une classe de gestion de chaînes de caractères :

1) Placer le caractère directement dans la chaîne de caractères :
char charConcat[16] = "Personne #?";
charConcat[10] = i + '0'; // remplace le ?
(valable ici que pour 1 chiffre à placer !)

2) Transformer le caractère en chaîne de caractères pour pouvoir concaténer :
char charConcat[16];
char charIndex[2];
charIndex[0] = i + '0';
charIndex[1] = 0; // terminateur
strcpy(charConcat,"Personne #");
strcat(charConcat,charIndex);
(valable ici que pour 1 chiffre à placer !)
strcpy(charConcat,"Personne #");
strcat(charConcat,charIndex);
peut s'écrire aussi :
strcat(strcpy(charConcat,"Personne #"),charIndex);

3) Formater directement dans la chaîne réceptrice :
char charConcat[16];
sprintf(charConcat,"Personne #%d",i);
(valable quelque soit le nombre de chiffres à placer !)

Jean-François
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 mai 2008 à 00:03
char  charConcat[16] = "Personne #";

Ne pas oublier de réserver la mémoire nécessaire.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 mai 2008 à 03:04
Je pencherais pour:
char charConcat[32] = "Personne #";
itoa(id, &charConcat[10], 10);

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
13 mai 2008 à 10:03
C'est une autre possibilité de formatage direct comme avec sprintf() mais en initialisant une partie de la chaîne à la déclaration de celle-ci et en repérant la position de la chaîne à placer !

L'avantage du sprintf() c'est que tout se passe en une instruction et qu'il n'y a pas de position à repérer. Et si la chaîne à créer comportait quelque chose derrière le nombre (comme "Personne #1#") ça marche aussi, pas avec les autres méthodes.

Jean-François
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 mai 2008 à 15:08
Mais l'inconvénient c'est qu'il faut tout recopier à chaque fois dans le buffer. De plus, le fais que sprintf traite des regex ralentie donc le traitement.

"Et si la chaîne à créer comportait quelque chose derrière le nombre (comme "Personne #1#") ça marche aussi, pas avec les autres méthodes."

En effet. Cependant, on peut bien se bricoler un itoa retournant un pointeur sur fin de chaine. Dans ce cas, aucun problème à ce niveau.

C++ (@++)<!--
0
nord666 Messages postés 20 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 29 juin 2008
13 mai 2008 à 19:57
Merci à tous pour vos merveilleux conseils pour mon problème!
0
Rejoignez-nous