La Conversion de int en c-string (const char*) échoue
Je n'arrive pas à convertir int
à un c-string (const char*
):
int filenameIndex = 1;
stringstream temp_str;
temp_str<<(fileNameIndex);
const char* cstr2 = temp_str.str().c_str();
Il n'y a pas d'erreur mais cstr2
ne pas obtenir la valeur attendue. Il est initialisé avec une adresse.
Quel est le problème et comment puis-je résoudre ce problème?
Je suppose que ça dépend ce que tu veux dire par "convertir
Je n'ai pas l'esprit de la suppression de la
int
à char*
". Quelle est la "valeur attendue" d'un const char*
? Je m'attends à voir beaucoup comme "une adresse". *cstr2
est susceptible de regarder beaucoup plus comme 1
, tandis que temp_str
est dans la portée.Je n'ai pas l'esprit de la suppression de la
const
si vous avez une meilleure solution, comment faire pour le convertir.OriginalL'auteur user3165438 | 2014-09-15
Vous devez vous connecter pour publier un commentaire.
temp_str.str()
retourne un objet temporaire qui est détruit à la fin d'une instruction. En tant que tel, l'adresse pointée parcstr2
soient invalidées.Au lieu de cela, utiliser:
DÉMO
OriginalL'auteur Piotr Skotnicki
temp_str.str()
est temporairestring
valeur, détruit à la fin de l'instruction.cstr2
est alors un bancales pointeur, invalidé lorsque le tableau, il a souligné a été supprimé par la chaîne de destruction.Vous aurez besoin d'un non-chaîne temporaire si vous voulez garder un pointeur:
C++ moderne a également légèrement plus pratique, chaîne de fonctions de conversion:
Encore une fois, cela renvoie une
string
par valeur, donc n'essayez pascstr2 = to_string(...).c_str()
auto
pour les variables, aussi longtemps que il a besoin de C++11 est de toute façon en raison de std::to_string.Merci, je voudrais utiliser le
to_string
mais je reçois tge erreur de compilation suivante: "plus d'un exemple de surcharge de fonction: to_string". Ce qui est absent?En supposant que vous êtes, y compris
<string>
(qui, j'imagine, vous devez utiliserstring
à tous), et en supposant quefileNameIndex
a typeint
comme indiqué, il devrait fonctionner. Peut-être que vous avez écrit une fonction appeléeto_string
, auquel cas qualifier cette avecstd::
. Vous avez peut-être une fracture de la bibliothèque: il me semble que certaines anciennes versions de la licence GNU de bibliothèque n'a pas fournir tous les surcharges deto_string
, dans ce cas, vous auriez besoin de convertir explicitement non pris en charge types de celles qui sont fournis (ou mise à jour de votre compilateur).OK, Merci beaucoup! upvoted.
OriginalL'auteur Mike Seymour