Problème strcat (c)
Bonjour,
Je rencontre un petit problème avec la fonction strcat.
j'ai déclaré plusieurs chaine de caractère.
la première récupère un int converti en caractère, je l'ai déclaré ainsi :
char chaine[2]="";
la seconde récupère plusieurs concaténations successives.
char chaine_finale[20]="";
avec les variables :
int i;
char i_char[2];
j'ai donc dans mon code :
strcat(chaine,"0");
sprintf(i_char,"%d",i);
strcat(chaine,i_char);
pour l'instant pas de problème, la variable chaine contient bien les caractères que je souhaite.
Mais lorsque je concatène cette chaine avec l'autre :
strcat (chaine_final, "test_");
strcat (chaine_final,chaine);
printf ("chaine_final = %s\n",chaine_final);
voici le résultat :
chaine_final = test_
la deuxième partie (chaine) n'a pas été concaténé.
Comment puis-je faire ?
Je rencontre un petit problème avec la fonction strcat.
j'ai déclaré plusieurs chaine de caractère.
la première récupère un int converti en caractère, je l'ai déclaré ainsi :
char chaine[2]="";
la seconde récupère plusieurs concaténations successives.
char chaine_finale[20]="";
avec les variables :
int i;
char i_char[2];
j'ai donc dans mon code :
strcat(chaine,"0");
sprintf(i_char,"%d",i);
strcat(chaine,i_char);
pour l'instant pas de problème, la variable chaine contient bien les caractères que je souhaite.
Mais lorsque je concatène cette chaine avec l'autre :
strcat (chaine_final, "test_");
strcat (chaine_final,chaine);
printf ("chaine_final = %s\n",chaine_final);
voici le résultat :
chaine_final = test_
la deuxième partie (chaine) n'a pas été concaténé.
Comment puis-je faire ?
Configuration: Windows XP Firefox 3.0.11
2 réponses
-
Il y a au moins deux erreurs majeures et tu as de la chance que ton programme ne se termine pas en 'segment fault'.
1) tu réserves seulement 2 octets dans 'chaine'; c'est bien peu pour y placer un entier (que tu as d'ailleurs oublié d'initialiser!) qui peu varier (suivant les machines) de -32000 à + 32000 (environ) soit une réservation minimale de 7 octets car il ne faut pas oublier le '0x00' de fin de chaine.
2) strcat (chaine_final, "test_"); Non !!! Il faut mettre: strcpy (chaine_final, "test_"); sinon tu ajoutes 'test_' à la chaîne 'chaine_final' (tiens ce n'est plus 'chaine_finale) qui d'ailleurs n'a pas été initialisée... !!!
Donc finalement, ça fait plus de deux erreurs ;-)
Bonne continuation. -
merci je vais corriger ça alors !