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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Pas de copie lors de l'affectation entre objets string?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[C++] Pas de copie lors de l'affectation entre objets string?

n°755490
Blakstaf
Posté le 07-06-2004 à 21:38:32  profilanswer
 

Je me suis dit que j'allais laisser tomber les char* pour me mettre aux string de la STL.
 
Mais il ya quelque chose qui me dérange.
 
Si je fais :
 
string chaine1="Ma chaine de caracteres";
string chaine2 = chaine1;
 
chaine2 et chaine1 pointent tous deux sur "Ma chaine de caractères".  
C'est bien gentil tout ca mais moi je veux modifier chaine2 sans pour autant que chaine1 soit modifiée.
En regardant la doc, j'ai vu la fonction membre copy mais je n'arrive pas a bien comprendre comment elle s'utilise.
 
Un peu d'aide serait bienvenue!

mood
Publicité
Posté le 07-06-2004 à 21:38:32  profilanswer
 

n°755495
verdoux
And I'm still waiting
Posté le 07-06-2004 à 21:49:22  profilanswer
 

Relis la doc

n°755510
Blakstaf
Posté le 07-06-2004 à 22:02:46  profilanswer
 

Bon, j'ai compris l'utilisation de copy mais ca fait aps ce que je veux. Je veux qu'une copie de "Chaine de Caractères" soit placée en mémoire et que chaine2.begin() pointe dessus.  
Or, copy ne fait que recopier les caractères à l'emplacement mémoire pointé par chaine2.begin().
 
Bref, y a quand même un moyen rapide d'effectuer une copie, non ?

n°755514
kadreg
profil: Utilisateur
Posté le 07-06-2004 à 22:06:17  profilanswer
 

blakstaf a écrit :


 
Bref, y a quand même un moyen rapide d'effectuer une copie, non ?


 
string str2 = str1;

n°755520
Blakstaf
Posté le 07-06-2004 à 22:08:54  profilanswer
 

kadreg a écrit :

string str2 = str1;


 
Non

n°755522
verdoux
And I'm still waiting
Posté le 07-06-2004 à 22:09:59  profilanswer
 
n°755524
Blakstaf
Posté le 07-06-2004 à 22:12:36  profilanswer
 

Ca pointe sur la même chaine. Modifier l'un revient a modifier l'autre. C'est pas ce que j'appelle une recopie (pas comme je la désire!).

n°755525
verdoux
And I'm still waiting
Posté le 07-06-2004 à 22:13:19  profilanswer
 

blakstaf a écrit :

Ca pointe sur la même chaine. Modifier l'un revient a modifier l'autre. C'est pas ce que j'appelle une recopie (pas comme je la désire!).


Tu la modifies comment ?

n°755526
Blakstaf
Posté le 07-06-2004 à 22:14:39  profilanswer
 

si je fais  
chaine2 = "Nouvelle chaine";
 
chaine1 va egalement me donner "Nouvelle chaine"

n°755529
verdoux
And I'm still waiting
Posté le 07-06-2004 à 22:16:00  profilanswer
 

Jette ton compilo.

mood
Publicité
Posté le 07-06-2004 à 22:16:00  profilanswer
 

n°755532
Blakstaf
Posté le 07-06-2004 à 22:17:28  profilanswer
 

Visual C++ 6.0 .  
Et comme j'ai un projet a faire en utilisant les MFC windows, j'ai pas trop le choix!

n°755536
el muchach​o
Comfortably Numb
Posté le 07-06-2004 à 22:20:20  profilanswer
 

blakstaf a écrit :

si je fais  
chaine2 = "Nouvelle chaine";
 
chaine1 va egalement me donner "Nouvelle chaine"


 
En C oui, mais en C++, ça m'étonnerait. Tu as essayé ?


Message édité par el muchacho le 07-06-2004 à 22:21:58
n°755538
Blakstaf
Posté le 07-06-2004 à 22:21:16  profilanswer
 

el muchacho a écrit :

En C oui, mais en C++, ça m'étonnerait. Tu as essayé ?


 
Bien sur !

n°755539
kadreg
profil: Utilisateur
Posté le 07-06-2004 à 22:21:46  profilanswer
 

blakstaf a écrit :

Ca pointe sur la même chaine.  


 
Tu utiliserais pas une implémentation de la STL avec un système de copy-on-write des fois ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°755540
el muchach​o
Comfortably Numb
Posté le 07-06-2004 à 22:22:03  profilanswer
 


Et :
 
string str2(str1);
 
ça donne quoi ?

n°755543
verdoux
And I'm still waiting
Posté le 07-06-2004 à 22:23:15  profilanswer
 

kadreg a écrit :

Tu utiliserais pas une implémentation de la STL avec un système de copy-on-write des fois ?


Sauf que là le copy-on-write marche pas

n°755544
Dion
Acceuil
Posté le 07-06-2004 à 22:24:48  profilanswer
 

Faut que je fasse du C++ :|


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°755547
kadreg
profil: Utilisateur
Posté le 07-06-2004 à 22:29:54  profilanswer
 

Dion a écrit :

Faut que je fasse du C++ :|


 
Si tu peux t'en passer, n'h"site pas :/


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°755548
Dion
Acceuil
Posté le 07-06-2004 à 22:30:58  profilanswer
 

kadreg a écrit :

Si tu peux t'en passer, n'h"site pas :/


 
Et si j'ai le choix entre C et C++ ? :D


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°755555
Blakstaf
Posté le 07-06-2004 à 22:37:02  profilanswer
 

el muchacho a écrit :

Et :
 
string str2(str1);
 
ça donne quoi ?


 
Ca effectue la même chose.
 
kadreg > Je sais pas c'est quoi cette histoire de STL avec copy on write.
 
Comme vous m'aviez mis le doute, j'ai téléchargé la derniere version de la STL sur le site de SGI mais ca n'a malheureusement rien changé.

n°755557
Blakstaf
Posté le 07-06-2004 à 22:40:14  profilanswer
 

C'est quand même bizarre cette histoire. Chez vous, faire string chaine1= chaine2 , ca vous fait une recopie complète ?

n°755559
SquiZZ
Posté le 07-06-2004 à 22:41:04  profilanswer
 

blakstaf a écrit :

Visual C++ 6.0 .  
Et comme j'ai un projet a faire en utilisant les MFC windows, j'ai pas trop le choix!


 
si tu dois utiliser les MFC, utilise la classe CString et basta.

n°755560
el muchach​o
Comfortably Numb
Posté le 07-06-2004 à 22:41:19  profilanswer
 

Bon réflexe, il vaut mieux laisser tomber la STL Microsoft.
Tu te plantes qq part. Tu linkes pas avec la bonne STL, ou tu fais pas du C++ mais du C, j'en sais rien.

n°755561
Kristoph
Posté le 07-06-2004 à 22:41:26  profilanswer
 

Ça ressemble à qq qui fait un c_str() sur une string puis qui retire le const avec un cast :o

n°755562
kadreg
profil: Utilisateur
Posté le 07-06-2004 à 22:42:58  profilanswer
 

Code :
  1. #include <string>
  2. #include <iostream>
  3. int main(int argc, char* argv[])
  4. {
  5. std::string str1 = "bli bla blo";
  6. std::string str2 = str1;
  7. str1.append (" blu" );
  8. std::cout << str1 <<std::endl;
  9. std::cout << str2<<std::endl;
  10. }


 

C:\Program Files\Microsoft Visual Studio\MyProjects\taiste\Debug>taiste
bli bla blo blu
bli bla blo
 
C:\Program Files\Microsoft Visual Studio\MyProjects\taiste\Debug>


 
:o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°755563
el muchach​o
Comfortably Numb
Posté le 07-06-2004 à 22:44:06  profilanswer
 

Merci, affaire réglée.


Message édité par el muchacho le 07-06-2004 à 22:44:20
n°755564
Dion
Acceuil
Posté le 07-06-2004 à 22:46:40  profilanswer
 


 
et moi :O


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°755565
kadreg
profil: Utilisateur
Posté le 07-06-2004 à 22:47:47  profilanswer
 


 
En C, on peut faire des truc dégueulasses
En C++, on peut faire largement pire.
 
Le C++, c'est la zoophilie de l'informatique.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°755566
Blakstaf
Posté le 07-06-2004 à 22:50:42  profilanswer
 

Kristoph a écrit :

Ça ressemble à qq qui fait un c_str() sur une string puis qui retire le const avec un cast :o


 
C'est la base du probleme !

n°755568
kadreg
profil: Utilisateur
Posté le 07-06-2004 à 22:52:00  profilanswer
 

blakstaf a écrit :

C'est la base du probleme !


 
Bah il faut pas enlever le const.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°755570
Dion
Acceuil
Posté le 07-06-2004 à 22:52:28  profilanswer
 

kadreg a écrit :

En C, on peut faire des truc dégueulasses
En C++, on peut faire largement pire.
 
Le C++, c'est la zoophilie de l'informatique.


 
Donc je fais koi ? du Java ? :|


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
n°755573
Taz
bisounours-codeur
Posté le 07-06-2004 à 22:54:03  profilanswer
 

blakstaf a écrit :

C'est la base du probleme !

c'est la base de l'incompréhension

n°755574
SquiZZ
Posté le 07-06-2004 à 22:56:59  profilanswer
 

blakstaf a écrit :

C'est la base du probleme !


 
 :heink:  
tu peux poster ton code qu'on rigol^H^H^H^H^H voie ?

n°755576
Taz
bisounours-codeur
Posté le 07-06-2004 à 22:58:06  profilanswer
 

^W ?
^U ?

n°755580
Blakstaf
Posté le 07-06-2004 à 22:59:49  profilanswer
 

Je comprends plus trop. j'ai changé une option ds Visual C++. (Project->Settings Onglet C/C++ . j'ai choisi "C++ programs" ds Category a la place de "General". j'ai relancé le prog , étonnant, ca fait une recopie!  
 
Je repasse a General, et la ca fonctionne.  
Je suppose qu'il a pas du prendre en compte la derniere version des STL tout à l'heure....
enfin, affaire réglée.

n°755591
Blakstaf
Posté le 07-06-2004 à 23:07:44  profilanswer
 

Pour ce qui est du probleme avec les CString, c'est que comme vous le savez, les fonctions en MFC n'acceptent pas en paramètre d'entrée les string mais les CString. Donc je suis obligé de passer par un  c_str.
Je récupère donc d'une de mes fonctions un string que je ne veux pas modifier ds une autre variable string qu'on appellera chaine1.
 
Mais comme la recopie ne s'effectuait pas, quans je passais chaine1.c_str() a la fonction MFC, ca me transtypait mon string original.

n°755595
Kristoph
Posté le 07-06-2004 à 23:09:57  profilanswer
 

Ce n'est pas encore suffisant ! Même si maintenant la recopie se fait, cela ne veux pas dire qu'il est permis de modifier le résultat de c_str().
 
D'ailleurs, il est formellement interdit de modifier le contenu de c_str() :)

n°755596
Taz
bisounours-codeur
Posté le 07-06-2004 à 23:09:59  profilanswer
 

ça transtype rien du tout: ça te renvoie un pointeur vers une partie de ta string terminée par un 0, en lecture seule, et valable uniquement dans l'expression courante

n°755597
Blakstaf
Posté le 07-06-2004 à 23:11:46  profilanswer
 

Ok. Quoi qu'il en soit le problème il vient du fait qu'a la fin du bloc, ca fait appel au destructeur de la classe CString, qui détruit gentiment le string original.

n°755607
Kristoph
Posté le 07-06-2004 à 23:17:25  profilanswer
 

blakstaf a écrit :

Ok. Quoi qu'il en soit le problème il vient du fait qu'a la fin du bloc, ca fait appel au destructeur de la classe CString, qui détruit gentiment le string original.


 
Quand on vous disais que les MFC c'est de la merde :)
 
Au moins quand tu construis ta CString, tu dois pouvoir lui dire de ne jamais desalloué le char * d'origine non ?


Message édité par Kristoph le 07-06-2004 à 23:17:35
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [C++] Pas de copie lors de l'affectation entre objets string?

 

Sujets relatifs
[C++] Serialisation d'une liste d'objets dérivés[Websphere] fonction split() de la classe String non implémenté ?
Questionq VB sur copie de fichiers/exportation de variable/audioeval() & affectation [Résolu]
Pb sous PL/SQL : Affectation d'une valeur à une variable[Java] Création de String
[java] copie de fichier et progressbarAffectation des variables C à des variables VC++ ?
JList et affichage du nom des objets autre que nomDeMaClasse@3fd4gf5[php] recup d'un string avec ' ou " dans un input
Plus de sujets relatifs à : [C++] Pas de copie lors de l'affectation entre objets string?


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