Convertir C++ variable chaîne de caractères de long
J'ai une variable:
string item;
Il est initialisé au moment de l'exécution. J'ai besoin de le convertir à la longue. Comment faire? J'ai essayé atol() et strtol() mais j'ai toujours erreur suivante pour strtol() et atol() respectivement:
cannot convert 'std::string' to 'const char*' for argument '1' to 'long int strtol(const char*, char**, int)'
cannot convert 'std::string' to 'const char*' for argument '1' to 'long int atol(const char*)'
- la chaîne a une fonction c_str qui va exposer comme un const char*
item.c_str()
sera de retourconst char*
de lastd::string
.
Vous devez vous connecter pour publier un commentaire.
Essayer comme ceci:
long i = atol(item.c_str());
parce que cette fonction est dangereux!cout << atoi("9879abc879xyz");
Voir de quoi il s'imprime!atol
est d'environ 3-4 niveaux loin d'être une grande réponse, mais "dangereux" qui semble être une exagération.atoi("0")
etatoi("abc")
. les Deux de retour0
. 😛c++11:
http://en.cppreference.com/w/cpp/string/basic_string/stol
C++98:
http://en.cppreference.com/w/cpp/string/byte/strtol
C++11
, de sorte que vous aurez besoin de vérifier que vous disposez d'une mise à jour du compilateur, et qui des indicateurs à utiliser.long l = atol(item.c_str());
parce que cette fonction est dangereux!atol
entraîner un comportement non défini si une erreur s'est produite.Utilisation std::stol < caractères de remplissage de l'espace >
Utiliser une chaîne de stream.
Si vous n'avez pas accès à C++11, et vous pouvez utiliser la bibliothèque boost, vous pouvez envisager cette option: