Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 21/12/2005, à 01:56

Kiboumz

Fonction itoa (conversion de type)

Bonjour, j'essaie de compiler un programme utilisant la fonction itoa (de la librairie stdlib.h), mais ça me dit une erreur comme quoi la fonction itoa (conversion d'un int en char) n'existe pas. Pourtant, je peux utiliser la fonction atoi (conversion d'un char en int), mais moi j'ai besoin de itoa et non d'atoi, alors je ne comprends pas comment pouvoir utiliser cette fonction qui marche pourtant très bien quand je compile avec visual studio sous windows, mais avec gcc cela ne fonctionne pas... la librairie stdlib est-elle unique à windows... ? et existe t'il une fonction similaire à itoa ?

merci
a+

#2 Le 21/12/2005, à 10:31

thx1138

Re : Fonction itoa (conversion de type)

L'en-tête stdlib.h n'est pas unique à Windows. Si je ne dis pas de bêtise, il fait partie de la bibliothèque standard du C et est donc disponible sur toutes les plateformes qui offrent une telle bibliothèque.

La fonction itoa() n'est, quant à elle, pas dans la bibliothèque standard.

PS : ces infos sont à prendre avec précaution, je n'ai pas eu le temps de vérifier.


They did not know it was impossible, so they did it - Mark Twain

Hors ligne

#3 Le 21/12/2005, à 12:02

eofr

Re : Fonction itoa (conversion de type)

itoa() n'est pas disponible sous Linux. Voilà le code pour des entiers positifs

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

int
long_int (int n)
{
	float x = log10 (n);
	return (int) x + 1;
}

char *
retourne (char *a)
{
	char *b = malloc (strlen (a));
	int i;
	for (i = 0; i < strlen (a); i++)
	{
		b[i] = a[strlen (a) - i - 1];
	}
	b[i] = '\0';
	return b;

}


char *
itoa (int n)
{

	char *a = malloc (long_int (n) + 1);
	int i;
	for (i = 0; n > 0; i++)
	{
		a[i] = n % 10 + 48;
		n = n / 10;
	}
	a[i + 1] = '\0';
	return retourne (a);

}

Je te laisse le soin d'adapter au cas où l'entier est negatif

Hors ligne

#4 Le 21/12/2005, à 17:49

Kiboumz

Re : Fonction itoa (conversion de type)

Bonjour,

y'a t-il une raison en particulier pourquoi cette fonction n'est pas disponible, je trouve cela un peu dommage et j'espère que cela n'arrive pas trop souvent...

merci
a+

#5 Le 21/12/2005, à 19:52

thx1138

Re : Fonction itoa (conversion de type)

Kiboumz a écrit :

Bonjour,

y'a t-il une raison en particulier pourquoi cette fonction n'est pas disponible, je trouve cela un peu dommage et j'espère que cela n'arrive pas trop souvent...

merci
a+

En fait, elle n'existe pas pour une raison toute simple : il faut utiliser la fonction snprintf() qui se comporte comme printf() sauf que le résultat est stocké dans une chaîne de caractères.

Bref, le code qui réalise ce que tu veux faire est :

// ...
#define LENGTH 256
int a = -512;
char res[LENGTH];
// initialisation de res[]
snprintf(res, LENGTH, "%i", a);

Et le tour est joué smile

Cela offre un avantage certain : une fonction suffit pour tous les types pouvant être formattés par la famille des printf().
Eofr> désolé ... smile

Dernière modification par thx1138 (Le 21/12/2005, à 19:55)


They did not know it was impossible, so they did it - Mark Twain

Hors ligne

Haut de page ↑