[débutant] char* + char* = concaténer

char* + char* = concaténer [débutant] - C++ - Programmation

Marsh Posté le 24-02-2006 à 00:37:27    

Bonjour,
 
je suis au prise avec un problème de concaténation en C++. J'ai 2 variable soit nom et prenom. Tous deux sont des char

Code :
  1. char *nom, *prenom;
  2. nom = Prof_Cour->nom;
  3. prenom = Prof_Cour->prenom;


 
je voudrais savoir comment concaténer les deux en un seul char* je sais que ce n'est pas aussi simple que

Code :
  1. valeur = nom + prenom;


 
merci !

Reply

Marsh Posté le 24-02-2006 à 00:37:27   

Reply

Marsh Posté le 24-02-2006 à 00:43:46    

il y a un type string en c++
 

Code :
  1. #include <string>
  2. ...
  3. std::string nom, prenom;
  4. ...
  5. std::string valeur = nom + prenom;

Reply

Marsh Posté le 24-02-2006 à 00:48:11    

je ne peux malheureusement pas m'offrir ce luxe. M. le professeur ne le souhaite pas.
 
 :fou:

Reply

Marsh Posté le 24-02-2006 à 00:50:46    

[:pingouino] ben spas du c++ que vous faites alors c'est du C...ou ptet pour la notion de pointeur [:gratgrat]

Reply

Marsh Posté le 24-02-2006 à 00:53:54    

C'est fort possible...

Reply

Marsh Posté le 24-02-2006 à 00:56:27    

sinon penses tu que tu aies droit a ca ?

Reply

Marsh Posté le 24-02-2006 à 01:08:16    

J'avou être un peu mélangé dans tout ça....
Tout ce que je peux dire c'est que je suis au prise avec ce problème. Actuellement, je travail sur un programme éducatif plutôt merdique et je suis à cours de temps. Présentement, j'ai tout concu mon programme de cette façon parce la base aprise en classe était conçu de cette façon. Comme je suis habitué au c#, VB, ASP, etc.... Mes notion de C sont très limité.
actuellement j'ai des problème avec les char et les tableau et je ne peux pas vraiment changer de façon de faire...
 
Voilà mon histoire...

Reply

Marsh Posté le 24-02-2006 à 01:16:37    

euh....ca repond pas a ma question [:pingouino]
oua alors y'a quelquechose que tu comprends pas dans cette fonction?
En fait le truc c'est que tes deux chaines sont representées par deux tableaux (en gros).
Pour les concatener, il va falloir creer une chaine de longueur chaine1 + chaine2 , puis copier ces deux chaines dans celle créée.
 
je t'invite a jeter un coup d'oeil sur ce topic, ca correspond a ce que tu veux faire ;)
bonne nuit


Message édité par gocho le 24-02-2006 à 01:17:12
Reply

Marsh Posté le 24-02-2006 à 01:28:06    

ouais ça me semble assez clair.
 
Pardon, ça m'a fait du bien de faire pitier un peu.
 
Merci !

Reply

Marsh Posté le 02-03-2006 à 21:03:29    

le problème avec le char c'est comme gocho l'a dit : tes caractères sont mis dans des tableaux de taille fixes donc additionner les 2 comme ça c problématique; problème de longueur...
la classe string résoud directement ce problème (tu dois plus t'en soucier quand tu additionnes les 2 chaines^^)

Reply

Marsh Posté le 02-03-2006 à 21:03:29   

Reply

Marsh Posté le 02-03-2006 à 21:17:02    

ouai, utilises std::string si tu veux pas devenir chauve

Reply

Marsh Posté le 02-03-2006 à 23:03:50    

Code :
  1. char buffer[256];
  2. strcpy(buffer,nom);
  3. strcat(buffer,prenom);
  4. ou
  5. sprintf(buffer,"%s %s",nom,prenom);


 
et voila


Message édité par red faction le 02-03-2006 à 23:03:58
Reply

Marsh Posté le 02-03-2006 à 23:34:20    

c'est pas terrible, dans les 2 cas il y a risque d'overflow (surtout que buffer est alloué sur la pile donc risque d'attaque de type 'buffer overflow')
en c standard on peut faire mieux,
strncpy et mettre explicitrement à 0 la valeur du dernier element du tableau (mais la chaine copiée peut etre tronquée, on peu ajouter un test)
strncat et s'assurer au prealable que la chaine à ajouter ne sera pas tronquée
 
sinon on arrete la les conneries et on utilise std::string


Message édité par skelter le 02-03-2006 à 23:36:12
Reply

Marsh Posté le 03-03-2006 à 00:21:41    

bah d'un autre cote son prof a dit quil ne pouvaient pa utiliser ca

Reply

Marsh Posté le 05-03-2006 à 18:11:53    

lol...oué je comprends pquoi pas les autres insistent avec le string si son prof veut pas
 

Citation :

je ne peux malheureusement pas m'offrir ce luxe. M. le professeur ne le souhaite pas

Reply

Marsh Posté le 05-03-2006 à 18:15:23    

Oui ... Mais la ça ressemble un peu a du :  
 
Apprendre C++
Chapitre 1 : Ecrire un programme avec du asm inline  
 
.. Faut pas pousser non-plus [:pingouino]


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-03-2006 à 18:22:05    

Reply

Marsh Posté le 07-03-2006 à 11:34:42    

Le prof veut sans doute faire comprendre le mecanisme d'adresse:
partant du principe que valeur est crrectement alloué:

Code :
  1. char * tmp = valeur;
  2. while ( *nom != '\0' )
  3.  *(tmp++) = *(nom++) ;
  4. *tmp++ =' ' ;//espace  
  5. while ( *prenom != '\0' )
  6.  *(tmp++) = *(prenom++);
  7.     return valeur;

Message cité 1 fois
Message édité par mougwai le 07-03-2006 à 12:12:39
Reply

Marsh Posté le 07-03-2006 à 11:52:53    

pourquoi 0x20 au lieu de la constante ' ' ? c'est moche et pas portable (en ebcdic l'espace c'est 0x40)

Reply

Marsh Posté le 07-03-2006 à 12:06:16    

:jap:

Reply

Marsh Posté le 07-03-2006 à 18:01:00    

Hehe, le pauvre, tu vas lui griller plus d'un neurone comme ca ...  :pt1cable:  
 

mougwai a écrit :


Code :
  1. char * tmp = valeur;
  2. while ( *nom != '\0' )
  3.  *(tmp++) = *(nom++) ;
  4. *tmp++ =' ' ;//espace  
  5. while ( *prenom != '\0' )
  6.  *(tmp++) = *(prenom++);
  7.     return valeur;



 
Sinon, peut etre qu'un truc comme :  
 

Code :
  1. char * result;
  2. result=malloc(strlen(Prof_Cour->nom)+1+strlen(Prof_Cour->prenom)+1);
  3. strcpy(result,Prof_Cour->nom);
  4. strcat(result,Prof_Cour->prenom);


Message édité par dinaiz le 07-03-2006 à 18:05:47
Reply

Marsh Posté le 07-03-2006 à 20:30:09    

malloc c'est du C ça :d

Reply

Marsh Posté le 08-03-2006 à 01:12:47    

Tu compte faire quoi avec des char* sans malloc [:spamafote] ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 08-03-2006 à 01:45:23    

nan mais attention, ca doit etre du C++ a deux balles la tranche, genre on remplace "malloc" par "new" et vlan, voila le code objet d'elite [:kbchris]


Message édité par chrisbk le 08-03-2006 à 01:45:40
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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