[RESOLU] copie de const char*

copie de const char* [RESOLU] - C++ - Programmation

Marsh Posté le 30-05-2006 à 20:12:06    

Bonjour,
j'ai un const char* qui est en fait une string transformée.  
J'aimerais copier ce const char* mais le problème, c'est que si je modifie la string, le const char* est aussi modifié.  
Comment faire pour copier aussi la valeur pointée ?


Message édité par oc_alex86 le 31-05-2006 à 14:58:42
Reply

Marsh Posté le 30-05-2006 à 20:12:06   

Reply

Marsh Posté le 30-05-2006 à 20:26:58    

c'est faux.
 
string s("blah" );
s[0] = 'c';
 

Reply

Marsh Posté le 30-05-2006 à 20:29:59    

je crois que tu n'as pas compris ma question :
je vais essayer d'être plus clair :
j'ai une string lecture qui est souvent modifiée :
et lorsque certaines conditions sont vraies, j'aimerai copier cette string dans une autre variable qui est elle un const char*
j'utilise donc la méthode lecture.c_str() mais ça ne marche pas

Reply

Marsh Posté le 30-05-2006 à 20:35:53    

dans un const char * tu stockes la valeur retour de c_str, cad une adresse

Reply

Marsh Posté le 30-05-2006 à 20:36:53    

c'est ce que j'ai fait, mais le const char* est modifié lorsque la string est modifiée

Reply

Marsh Posté le 30-05-2006 à 20:42:17    

oui, c'est normal. Dès que tu appelles une fonctions membre non const de std::string, tu est susceptible d'invalider le char* résultant de .c_str().

Reply

Marsh Posté le 30-05-2006 à 20:43:18    

la doc de sgi n'est pas tres precise à propos de c_str sur ce point

Reply

Marsh Posté le 30-05-2006 à 20:44:37    

comment dois-je procéder alors ?

Reply

Marsh Posté le 30-05-2006 à 20:48:33    

il faut alouer et copier, mais est-ce vraiment necessaire ?

Reply

Marsh Posté le 30-05-2006 à 20:50:00    

Merci pour ton aide
oui c'est nécessaire. Mais comment copier tous les caractères et non pas seulement le 1er ?

Reply

Marsh Posté le 30-05-2006 à 20:50:00   

Reply

Marsh Posté le 30-05-2006 à 20:54:14    

avec std::copy par exemple

Reply

Marsh Posté le 30-05-2006 à 21:59:36    

utilise std::vector<char> si tu peux.

Reply

Marsh Posté le 30-05-2006 à 22:00:28    

Code :
  1. char*
  2. string_dup(const std::string &s)
  3. {
  4.   char *cstr;
  5.   cstr = new char[s.size() + 1];
  6.   s.copy(cstr, std::string::npos);
  7.   cstr[s.size()] = '\0';
  8.   return cstr;
  9. }

sinon ça fait un truc comme ça

Reply

Marsh Posté le 31-05-2006 à 14:58:28    

ok c'est bon merci beaucoup

Reply

Marsh Posté le 31-05-2006 à 15:12:42    

c'est pas plus simple de créer une deuxième string (quitte à remployer la méthode 'c_str()') ?
 
genre :
 
 

Code :
  1. std::string original_string("mon ancienne chaîne..." );
  2. std::string new_string = string;

 

 
Tu peux ensuite modifier new_string et original_string à ta guise, sans que l'une des chaîne influe sur l'autre. Ensuite tu utilises new_string.c_str() comme tu faisai avant... c'est quand même moins prise de tête :)

Reply

Marsh Posté le 31-05-2006 à 18:03:14    

ce n'est malheureusement pas possible dans mon programme, mais merci quand même

Reply

Sujets relatifs:

Leave a Replay

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