118 votes

Comment convertir int en char *?

Le seul moyen que je connaisse est:

 #include <sstream>
#include <string.h>
using namespace std;

int main() {
  int number=33;
  stringstream strs;
  strs << number;
  string temp_str = strs.str();
  char* char_type = (char*) temp_str.c_str();
}
 

Mais y a-t-il une méthode avec moins de dactylographie?

163voto

Nawaz Points 148870
  • En C ++11, utilisez std::to_string comme:

     std::string s = std::to_string(number);
    char const *pchar = s.c_str();  //use char const* as target type
     
  • Et en C ++03, ce que vous faites est très bien, sauf que vous utilisez const comme:

     char const* pchar = temp_str.c_str(); //dont use cast
     

14voto

Je pense que vous pouvez utiliser un sprintf:

 int number = 33;
char* numberstring[(((sizeof number) * CHAR_BIT) + 2)/3 + 2];
sprintf(numberstring, "%d", number);
 

7voto

maverik Points 3048

Vous pouvez utiliser boost

 #include <boost/lexical_cast.hpp>
string s = boost::lexical_cast<string>( number );
 

5voto

user331471 Points 352

Je ne décoderais pas le const dans la dernière ligne car il est là pour une raison. Si vous ne pouvez pas vivre avec un caractère constant *, vous feriez mieux de copier le tableau tel que:

 char* char_type = new char[temp_str.length()];
strcpy(char_type, temp_str.c_str());
 

5voto

LihO Points 21648

C-style solution pourrait être d'utiliser itoa, mais la meilleure façon est d'imprimer ce nombre en chaîne de caractères en utilisant sprintf / snprintf. Cochez cette question: Comment faire pour convertir un entier en chaîne de façon portable?

Notez que itoa fonction n'est pas définie dans la norme ANSI-C et n'est pas partie du C++, mais est pris en charge par certains compilateurs. C'est un non-standard de la fonction, donc vous devriez éviter de l'utiliser. Vérifier à cette question: Alternative à itoa() pour la conversion d'entier en chaîne de caractères en C++?

Notez également que l'écriture de style C du code lors de la programmation en C++ est considéré comme une mauvaise pratique et parfois considéré comme "terrifiant de style". Avez-vous vraiment envie de le transformer en style C char* chaîne de caractères? :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X