Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1831 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2041592
kkny
Posté le 12-12-2010 à 12:51:43  profilanswer
 

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:

mood
Publicité
Posté le 12-12-2010 à 12:51:43  profilanswer
 

n°2041595
kkny
Posté le 12-12-2010 à 13:02:10  profilanswer
 

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

n°2041655
regexp42
Eplucheur de RFC.
Posté le 12-12-2010 à 19:40:45  profilanswer
 

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
n°2041664
kkny
Posté le 12-12-2010 à 21:02:11  profilanswer
 

Merci beaucoup pour votre aide !

n°2041903
Sve@r
Posté le 14-12-2010 à 00:02:56  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
[c/c++] comment placer un texte entre deux caracteresCalculette qui prend et retourne une chaîne de caractères
Rechercher l'existance de chaînes dans une BD[php]imagettftext et caractères accentués.
[RESOLU] Remplacement d'une chaine de caractères dans un fichier html[Résolu] Fonction supp petit mot et supp caractères spéciaux
[Résolu] Problème concaténation et chemin vers autre classeurLangage C : concaténation de chaines de caractères
Concatenation de chaines de caracteres[Vb] concaténation de chaines de caractères
Plus de sujets relatifs à : concaténation de chaines de caractères !!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR