nord666
Messages postés20Date d'inscriptionjeudi 19 avril 2007StatutMembreDernière intervention29 juin 2008
-
13 mai 2008 à 01:31
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 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!
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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*>
nord666
Messages postés20Date d'inscriptionjeudi 19 avril 2007StatutMembreDernière intervention29 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();
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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.