Pages : 1
#1 Le 21/12/2005, à 00: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, à 09: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, à 11: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, à 16: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, à 18:52
- thx1138
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+
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é
Cela offre un avantage certain : une fonction suffit pour tous les types pouvant être formattés par la famille des printf().
Eofr> désolé ...
Dernière modification par thx1138 (Le 21/12/2005, à 18:55)
They did not know it was impossible, so they did it - Mark Twain
Hors ligne