Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/10/2007, à 12:51

GarulfoUnix

[Langage C] Convertir un 'entier' en 'chaine de caractères'. [OK]

Bonjour smile ,

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 smile .

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 wink


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]

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" ? big_smile

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]

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" ? big_smile

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]

pipomolo a écrit :

Est-ce que ça ne revient pas un peu à "réinventer la roue" ? big_smile

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]

®om a écrit :
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" ? big_smile

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