Const char * vers char *

[Résolu]
Signaler
Messages postés
20
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
29 juin 2008
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Salut,

Je doit transformer un constchar * en char *. J'ai trouver sur internet: const_cast<char *>, mais je ne réussit pas à obtenir la variable sans le const

Je veux quelque chose du genre

<hr />ostringstream o;
//Assignation de valeur à o ici
//...
//
char * temp = const_cast<char *>(o.str().c_st());
<hr />
Merci à tous!

5 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
strTemp est locale, donc quand tu sors de ton for, la valeur retournée par c_str() n'est plus valide (la mémoire a été vraisemblablement libérée dans le destructeur de la chaine).
De toutes facons, quand tu commences à caster un const char* en char* c'est que tu joues avec le feu et tu va vers les ennuis. Ici il faut à un moment donnée allouer de la mémoire dans laquelle tu mettras tes chaines. Le plus simple dans ton cas c'est d'utiliser un vector<string> et non un vector<char*>

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
20
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
29 juin 2008

je doit obligatoirement pouvoir obtenir un  char *.

le problème de la boucle est que la classe vector a besoin de fonctions dans le template utilisé pour bien fonctionner. Char * n'a pas ces fonctions. Résultat: Un bug.

Donc, pour résoudre mon problème je fait un vector<string>
et j'obtiens un char * en fesant    char * temp = (char *)controllersName[compteur].c_str();

Et ça marche!!
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Dans ton cas:
char * temp = (char*)(o.str().c_str());

C++ (@++)<!--
Messages postés
20
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
29 juin 2008

Enregistre "".

J'ai essayé avec une variable temporaire:

string strTemp = o.str();
char * temp =
(char *)strTemp.c_str());

Et ça marche.

Mais j'ai un autre problème!

J'utilise la library vector

for
(
int i = 0; i < num_joysticks; ++i)
{
ostringstream o;
o <<
"Joystick #" << i;
string strTemp = o.str();
controllersName.push_back((
char *)strTemp.c_str());
}

Je met un breakpoint à la ligne du   push_back.
Je fais F10 pour aller une ligne plus loin.
Je regarde le contenu de controllersName.
Il y a "Joystick #0". C'est normal.
Là je fais F10 à nouveau, il va sur la ligne  for(int i...  et le contenu de controllersName qui était "Joystick #0" est devenu "".
controllersName est déclaré comme suit juste après ma liste d'include

vector<

char *> controllersName;

Une idée de solution?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Tu devrais quand même te demander pourquoi tu as besoin d'un char* et non d'un const char*. Si tu as besoin d'un char*, ca veut dire que la chaine peut être modifiée. Or la valeur retournée par c_str() ne doit pas être modifiée.

_____________________________________
Un éditeur de ressources gratuit pour Windows