nord666
Messages postés20Date d'inscriptionjeudi 19 avril 2007StatutMembreDernière intervention29 juin 2008
-
12 mai 2008 à 23:43
nord666
Messages postés20Date d'inscriptionjeudi 19 avril 2007StatutMembreDernière intervention29 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.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 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 !)
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 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.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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.