Const char * vers char *

Résolu
nord666 Messages postés 20 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 29 juin 2008 - 13 mai 2008 à 01:31
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 14 mai 2008 à 18:38
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
13 mai 2008 à 22:05
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
3
nord666 Messages postés 20 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 29 juin 2008
14 mai 2008 à 05:04
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!!
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 mai 2008 à 01:41
Dans ton cas:
char * temp = (char*)(o.str().c_str());

C++ (@++)<!--
0
nord666 Messages postés 20 Date d'inscription jeudi 19 avril 2007 Statut Membre Dernière intervention 29 juin 2008
13 mai 2008 à 01:54
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
14 mai 2008 à 18:38
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
0