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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1312769
biltcd
Posté le 24-02-2006 à 00:37:27  profilanswer
 

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 !

mood
Publicité
Posté le 24-02-2006 à 00:37:27  profilanswer
 

n°1312776
skelter
Posté le 24-02-2006 à 00:43:46  profilanswer
 

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;

n°1312778
biltcd
Posté le 24-02-2006 à 00:48:11  profilanswer
 

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

n°1312779
gocho
Posté le 24-02-2006 à 00:50:46  profilanswer
 

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

n°1312780
biltcd
Posté le 24-02-2006 à 00:53:54  profilanswer
 

C'est fort possible...

n°1312781
gocho
Posté le 24-02-2006 à 00:56:27  profilanswer
 

sinon penses tu que tu aies droit a ca ?

n°1312783
biltcd
Posté le 24-02-2006 à 01:08:16  profilanswer
 

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

n°1312784
gocho
Posté le 24-02-2006 à 01:16:37  profilanswer
 

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
n°1312786
biltcd
Posté le 24-02-2006 à 01:28:06  profilanswer
 

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

n°1317374
ehben
Posté le 02-03-2006 à 21:03:29  profilanswer
 

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

mood
Publicité
Posté le 02-03-2006 à 21:03:29  profilanswer
 

n°1317376
skelter
Posté le 02-03-2006 à 21:17:02  profilanswer
 

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

n°1317445
red factio​n
Posté le 02-03-2006 à 23:03:50  profilanswer
 

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
n°1317482
skelter
Posté le 02-03-2006 à 23:34:20  profilanswer
 

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
n°1317506
red factio​n
Posté le 03-03-2006 à 00:21:41  profilanswer
 

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

n°1319054
ehben
Posté le 05-03-2006 à 18:11:53  profilanswer
 

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

n°1319056
esox_ch
Posté le 05-03-2006 à 18:15:23  profilanswer
 

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
n°1319061
0x90
Posté le 05-03-2006 à 18:22:05  profilanswer
 
n°1320039
mougwai
I.C.A.
Posté le 07-03-2006 à 11:34:42  profilanswer
 

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
n°1320058
skelter
Posté le 07-03-2006 à 11:52:53  profilanswer
 

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

n°1320075
mougwai
I.C.A.
Posté le 07-03-2006 à 12:06:16  profilanswer
 

:jap:

n°1320413
dinaiz
Posté le 07-03-2006 à 18:01:00  profilanswer
 

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
n°1320530
ehben
Posté le 07-03-2006 à 20:30:09  profilanswer
 

malloc c'est du C ça :d

n°1320666
0x90
Posté le 08-03-2006 à 01:12:47  profilanswer
 

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


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1320673
chrisbk
-
Posté le 08-03-2006 à 01:45:23  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
[URGENT] [C++ débutant] problème avec tableau a plusieurs dimensions[!PERL] recuperation de données (pour débutant)
[C++ débutant] Différence entre un New et un "Type nom" ?[C++ débutant]Constructeur prenant un nombre de paramètres variable ?
[C++ débutant] Const_cast ? :-([Débutant] Socket
[C++ débutant] Liste chaînée, suite des problemes :Dptit'pb à résoudre, débutant total
[resolu]Debutant en php - derniere connection(question débutant) Afficher du texte à partir d'un .txt
Plus de sujets relatifs à : [débutant] char* + char* = concaténer


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