#1 Le 05/10/2007, à 12:51
- GarulfoUnix
[Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
Bonjour ,
Ca fait longtemps que j'ai pas développer en C et je me souviens plus comment convertir une variable de type 'int' en chaine de caractère.
En faite une fonction attend une chaine et je veux que le nombre deviennent une chaine.
Merci .
GarulfoUnix.
Dernière modification par GarulfoUnix (Le 05/10/2007, à 14:57)
http://doc.ubuntu-fr.org/gambas - Documentation sur le wiki
http://gambas.shos.fr - Site de la communauté francophone des utilisateurs de Gambas
Hors ligne
#2 Le 05/10/2007, à 13:07
- qqun
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
bonjour ,
tu peux utiliser sprintf tout simplement !
ex :
sprintf(machaine,"%d",monentier);
printf("res:%s",machaine);
#3 Le 05/10/2007, à 14:47
- gene69
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
j'ai failli répondre le contraire: http://peperillon.free.fr/annales/if3_2006_decembre.cpp
snprintf() est en effet une bonne solution, avec itoa()
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#4 Le 05/10/2007, à 14:56
- GarulfoUnix
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
Je vous remercie
http://doc.ubuntu-fr.org/gambas - Documentation sur le wiki
http://gambas.shos.fr - Site de la communauté francophone des utilisateurs de Gambas
Hors ligne
#5 Le 05/10/2007, à 18:50
- Link31
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
Sinon tu peux utiliser ça, pas besoin de snprintf() ou de itoa() :
#include <stdio.h>
int int_to_str(int value, char *buf, unsigned int len)
{
unsigned result = 0;
if (!buf)
return -1;
#define ADDCHAR(chr) \
if (result < len - 1) \
{ \
*buf++ = (chr); \
result++; \
}
int j = 0;
char int_to_str[16];
if (value < 0)
ADDCHAR('-');
char *ptr = int_to_str + sizeof(int_to_str) - 1;
do
{
int modulo = value % 10;
modulo = (modulo<0)?-modulo:modulo;
*ptr-- = modulo + '0';
value /= 10;
j++;
} while (value);
for (; j > 0; j--)
ADDCHAR(int_to_str[sizeof(int_to_str) - j]);
*buf = '\0';
return 0;
}
int main()
{
int value = 1234;
char result[10];
if (int_to_str(value, result, 10) == -1)
return 1;
printf("%s\n", result);
return 0;
}
Dernière modification par Link31 (Le 05/10/2007, à 18:52)
Hors ligne
#6 Le 05/10/2007, à 19:17
- pipomolo
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
Sinon tu peux utiliser ça, pas besoin de snprintf() ou de itoa() :
Est-ce que ça ne revient pas un peu à "réinventer la roue" ?
En tout cas, l'utilisation de snprintf est à préférer à itoa, qui est obsolète...
Hors ligne
#7 Le 05/10/2007, à 20:12
- ®om
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
Link31 a écrit :Sinon tu peux utiliser ça, pas besoin de snprintf() ou de itoa() :
Est-ce que ça ne revient pas un peu à "réinventer la roue" ?
En tout cas, l'utilisation de snprintf est à préférer à itoa, qui est obsolète...
Pourquoi itoa est-il obsolète (je ne développe quasiment jamais en C, mais j'ai entendu pas mal de fois que les fonctions "de base" que tout le monde connait sont obsolètes?
Hors ligne
#8 Le 05/10/2007, à 20:16
- Link31
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
Est-ce que ça ne revient pas un peu à "réinventer la roue" ?
Ben, ça sert à éviter de dépendre de la libc. C'est intéressant pour du code en espace noyau (bien que je sois loin d'être sûr que mon bout de code est assez sécurisé...).
Hors ligne
#9 Le 05/10/2007, à 21:00
- pipomolo
Re : [Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]
pipomolo a écrit :Link31 a écrit :Sinon tu peux utiliser ça, pas besoin de snprintf() ou de itoa() :
Est-ce que ça ne revient pas un peu à "réinventer la roue" ?
En tout cas, l'utilisation de snprintf est à préférer à itoa, qui est obsolète...
Pourquoi itoa est-il obsolète (je ne développe quasiment jamais en C, mais j'ai entendu pas mal de fois que les fonctions "de base" que tout le monde connait sont obsolètes?
La raison principale est que itoa n'est pas standard...ne fait pas partie de la norme ANSI...contrairement à sprintf et snprintf...qui sont donc à préférer pour des raisons de portabilité
Hors ligne