Retourner aux forums || Retourner au forum Programmation.c++
Programmation.c++ : conversion d'un entier en chaîne?
Posté par goret2 () le 02 juin 2007je cherche comment faire une conversion d'un entier en une chaîne de caractères ou alors comment affecter un entier à une chaîne par exemple :
int numero;
char* chaine; comment affecter "numero" à "chaine"??
merci.
> Lire le message (8 commentaires, moyenne: 2,1).
Google n'est pas ton ami ?
Tu pourrais faire l'effort de lire un des nombreux tutoriels C/C++ disponibles sur le net avant de poster ici !
Tu peux faire : sprintf(chaine,"%d",numero);
à condition bien sûr que tu aies alloué pour la chaîne un nombre de caractères suffisant pour tous les chiffres de ton entier.
Tu peux en outre contrôler le format (cadrage à gauche, compléter par des zéros...) : man sprintf
-
[^]Re: Google n'est pas ton ami ?
Posté par Manuel Menal (page perso, ) le 02/06/2007 à 10:11. (lien). Évalué à 4.Je dirai même plus : utilise snprintf(). De cette façon, tu seras sûr que tu n'auras pas de débordement de tampon, même si tu n'as pas alloué une taille suffisante. snprintf() est conforme C99, et il est présent sur la plupart des systèmes.
Je te laisse trouver comment calculer le nombre de chiffres d'un entier :-) (indice : log).
Si la portabilité n'est pas un problème, utiliser asprintf() permet de ne pas se casser la tête avec l'allocation mémoire. Mais c'est une extension GNU, donc seulement glibc.-
[^]Re: Google n'est pas ton ami ?
Posté par gc (page perso, ) le 02/06/2007 à 20:42. (lien). Évalué à 1.on peut facilement recoder asprintf, et au passage, on peut meme l'ameliorer au niveau de l'API.
char* strdup_(char* input)
{
char* ret = strdup(input);
if (ret == NULL) {
fprintf(stderr, "Out of memory, exiting - input was %s.\n", input);
exit(EXIT_FAILURE);
}
return ret;
}
char * vasprintf_(const char *msg, va_list args)
{
char s[8192];
vsnprintf(s, sizeof(s), msg, args);
return strdup(s);
}
// _GNU_SOURCE's asprintf like, but
// - doesn't need _GNU_SOURCE
// - returns allocated string
// - never returns NULL (prints failure and exit on out of memory)
char * asprintf_(const char *msg, ...)
{
char * results;
va_list arg_ptr;
va_start(arg_ptr, msg);
results = vasprintf_(msg, arg_ptr);
va_end(arg_ptr);
return results;
}
-
[^]Re: Google n'est pas ton ami ?
Posté par Manuel Menal (page perso, ) le 03/06/2007 à 12:57. (lien). Évalué à 2.Oui, ça se recode facilement - par contre, l'implém que tu donnes est pas forcément la meilleure... Notamment pour l'allocation en bloc de 8192 au lieu d'une allocation dynamique comme le fait l'asprintf() de la glibc.
Par ailleurs, je suis pas persuadé que retourner la chaîne plutôt qu'un int soit une bonne chose ; il est intéressant d'avoir la taille allouée en retour... (Et puis, pour quelqu'un qui est habitué à coder du GNU, c'est une abomination d'avoir autre chose qu'un int retourné, de toutes façons :-P).
http://www.gnu.org/software/gnulib/ fournit une version portable de asprintf() ainsi que de pas mal d'autres fonctions GNU, notamment les très pratiques error(), getline() et getdelim(). La bibliothèque fonctionne pour Windows, HP-UX, AIX, *BSD, Solaris et bien d'autres.-
[^]Re: Google n'est pas ton ami ?
Posté par gc (page perso, ) le 04/06/2007 à 15:20. (lien). Évalué à 1.l'implém que tu donnes est pas forcément la meilleure... Notamment pour l'allocation en bloc de 8192 au lieu d'une allocation dynamique comme le fait l'asprintf() de la glibc.
c'est certes une implémentation qui me convient, tu peux te faire un peu plus chevrer et être plus dynamique mais concrètement comme ça, ça me va très bien.
Par ailleurs, je suis pas persuadé que retourner la chaîne plutôt qu'un int soit une bonne chose ; il est intéressant d'avoir la taille allouée en retour... (Et puis, pour quelqu'un qui est habitué à coder du GNU, c'est une abomination d'avoir autre chose qu'un int retourné, de toutes façons :-P).
c'est dommage, le fonctionnel saibien(tm).
-
-
-
en C++, char* n'existe pas
Tu postes sur un sous-forum "c++", et non "c", et tu parles de char*.
Hum.
En C++, char* n'existe pas.
A supprimer de ta mémoire, de même de sprintf ou snprintf, vestige du C. Prendre un bouquin sur le C++ (par exemple ceux-la http://c.developpez.com/cours/#cours-cpp , gratuits) et apprendre les bases.
Pour répondre à la question :
http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/#(...)
http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/#(...)
#include < sstream >
std::ostringstream SS; //Ton gestionnaire de flux
SS << I; //I etant ton nombre
std::string TaChaineDeCharacter=SS.str(); //Pour le mettre dans un string, mieux que du char*, ou tu peux garder ton gestionnaire de flux.
Les FAQ, c'est bien aussi
http://c.developpez.com/faq/cpp/?page=strings#STRINGS_affect(...) (suivre le lien) =>
std::ostringstream oss; oss << "toto" << 42; const std::string chaine = oss.str();
-
[^]Re: Les FAQ, c'est bien aussi
Posté par Luc Hermitte (page perso, ) le 04/06/2007 à 12:18. (lien). Évalué à 1.Oups. J'avais zappé la réponse de Zénitram. Désolé pour le doublon.
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c++



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.