concaténation de chaines de caractères !!! - C - Programmation
Marsh Posté le 12-12-2010 à 13:02:10
ReplyMarsh Posté le 12-12-2010 à 19:40:45
Code :
|
J'ai mis %s au pif, je sais pas exactement ce que t'as, faudra peut-être adapter quelques types.
Marsh Posté le 14-12-2010 à 00:02:56
kkny a écrit : rectification : |
C'est normal.
En écrivant lp.ref [l1] = '-'; tu supprimes le '\0' de fin de chaine pour le remplacer par ce '-'.
Ensuite, quand tu fais strcat (lp.ref , lp.ch); le système cherche à aller au bout de lp.ref pour y ajouter lp.ch. Or, pour aller au bout, il cherche ce '\0' qui n'y est plus. Par chance (ou par malchance, ça dépend comment on le voit), il se trouve que 2 caractères après ce '-' il y a un '\0'. C'est pour ça que strcat() s'envoie pas en vrac dans la mémoire. Et donc la concaténation se fait mais un poil plus loin que ce prévu d'où ce caractère parasite...
Accessoirement, il n'y aurait pas ce '\0' hasardeux, le strcat() partait en torche et en memory fault ce qui t'aurait alors donné une bonne indication (d'où le chance/malchance)...
Marsh Posté le 12-12-2010 à 12:51:43
bonjour à tous,
je veux concaténer trois chaines de caractères séparées par '-' :
le principe me parait simple :
l1 = strlen (lp.d_e) ;
l2 = strlen (lp.ch) ;
strcat (lp.ref , lp.d_e);
lp.ref [l1] = '-';
strcat (lp.ref , lp.ch);
lp.ref [l1+l2+1] = '-';
strcat (lp.ref , lp.q);
bizarrement il m'affiche : un caractère de plus entre les chaines de caractères !!
exp :
pour lp.d_e : 10122010
pour lp.ch : cahier
pour lp.q :654
j'aurais comme résultat : 10122010-/cahier-654
ce caractère "/" perturbe toute la chaine !!!!