concaténation de chaines de caractères !!!

concaténation de chaines de caractères !!! - C - Programmation

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 !!!!  :fou:

Reply

Marsh Posté le 12-12-2010 à 12:51:43   

Reply

Marsh Posté le 12-12-2010 à 13:02:10    

rectification :
j'aurais comme résultat : 10122010-/cahie-654  
 
HELP !

Reply

Marsh Posté le 12-12-2010 à 19:40:45    

Code :
  1. snprintf(buf, sizeof(buf), "%s-%s-%s", lp.d_e, lp.ch, lp.q);


 
J'ai mis %s au pif, je sais pas exactement ce que t'as, faudra peut-être adapter quelques types.


Message édité par regexp42 le 12-12-2010 à 19:42:28
Reply

Marsh Posté le 12-12-2010 à 21:02:11    

Merci beaucoup pour votre aide !

Reply

Marsh Posté le 14-12-2010 à 00:02:56    

kkny a écrit :

rectification :
j'aurais comme résultat : 10122010-/cahie-654


 
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)...


Message édité par Sve@r le 14-12-2010 à 00:04:26

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed