Bonjour :)
Voila je travail sur la fonction strcat. Mais elle me pose problème.
En effet ci-dessous il y a trop d'arguments :
comment contourner ce problème ?Code:strcat(recupe, "%c", caractere);
Merci :)
Version imprimable
Bonjour :)
Voila je travail sur la fonction strcat. Mais elle me pose problème.
En effet ci-dessous il y a trop d'arguments :
comment contourner ce problème ?Code:strcat(recupe, "%c", caractere);
Merci :)
strcat fonctionne de cette maniere: strcat(chaine1, chaine2);
donc c'est normal qu'il y ait un argument de trop la technique:
chaine1 tu lui rajoute 2 char en fin de chaine pour avoir une memoire assez grande,
tu creer une chaine2 qui aura comme premier caractere ta variable caractere et en deuxieme un '\0'
puis tu utilise ton strcat avec chaine1 et chaine 2 ;)
Personnellement j'ai recoder une fonction qui retourne directement une chaine qui contient l'addition des deux, je trouvais sa plus simple que d'utiliser strcat systeme ;)
Addiction : strcat ne prend que deux arguments mais il y a aussi la fonction sprintf qui permet de printfer dans un tableau plutôt qu'à l'écran (ou toute autre sortie). Exemple :
N'oublie pas que %c c'est pour imprimer un caractère. Pour imprimer une chaîne de caractères c'est %s.Code:
1
2 char chaine[100]; sprintf(chaine, "%... %...", ...);
donc si je faisCitation:
strcat fonctionne de cette maniere: strcat(chaine1, chaine2);
?Code:strcat(recupe,caractere);
as-tu un exemple ?Citation:
chaine1 tu lui rajoute 2 char en fin de chaine pour avoir une memoire assez grande,
tu creer une chaine2 qui aura comme premier caractere ta variable caractere et en deuxieme un '\0'
puis tu utilise ton strcat avec chaine1 et chaine 2
j'y ai déjà pensé mais ce n'est pas possible, car la chaine sera formatée à chaque fois que la boucle s’exécutera. Donc si le mot à récupérer est "teste" et que je récupère une seul lettre par tour de boucle, il n'y aura que le denier "e" dans la chaine (dans ton exemple)Citation:
mais il y a aussi la fonction sprintf
voila un exemple qui me semble le plus simple pour toi:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 //cette fonction te retourne une chaine qui contient str et rajoute c en fin de chaine char *concat(char *str, char c) { char *ret; //alloue 'taille de str'+1 pour la chaine de retour if (!(ret=malloc((strlen(str)+2)*sizeof(*ret))) return (NULL); //remplie de '\0' bzero(ret,(strlen(str)+2)*sizeof(*ret)); //copie l'ancienne chaine de caractere dans la nouvelle strcpy(ret,str); ret[strlen(str)]=c; return (ret); } int main() { char *str; str=concat("un petit bout de texte", '!'); //affiche "un petit bout de texte!" printf(str); }
Non, pas si caractere est un caractère. Ce doit être une chaine de caractères (un tableau de caractères terminé par '\0') (et recup également)Citation:
donc si je fais
?Code:strcat(recupe,caractere);
Mais tu peux faire ça :
Code:
1
2
3
4 char recup[128] = {'\0'}; // ne contient que des 0 : forme une chaine vide car commençant par 0 char tab[2] = {'\0'}; // ne contient que des 0 : forme une chaine vide car commençant par 0 tab[0] = caractere; // tab[1] reste égal à '\0' et tab forme une chaine terminée par 0 strcat(recup, caractere);
Non tu n'y as pas encore pensé, sinon tu n'aurais jamais écrit strcat(recupe, "%c", caractere). Et si, c'est possible. Il suffit d'utiliser chaque chose comme il se doit. A titre d'exemple, les différents codes ci-dessous donnent le même résultat.
Code:
1
2
3 char chaine[100]; sprintf(chaine, "Bonjour"); strcat(chaine, " tout le monde.");
Code:
1
2
3
4 char chaine[100]; int n; n = sprintf(chaine, "Bonjour"); strcpy(chaine + n, " tout le monde.");
Code:
1
2
3
4 char chaine[100]; int n; n = sprintf(chaine, "Bonjour"); sprintf(chaine + n, " tout le monde.");
Bonjour,
Si ces fonctions sont disponibles, il est plutot conseille d'utiliser strncat et snprintf - avec les bons indices, bien sur.