EDIT :Désolé, j'aurais dû me rappeler que cette machine est décidément non standard, ayant branché divers libc
non standard implémentations à des fins académiques;-)
Comme itoa()
est en effet non standard, comme mentionné par plusieurs commentateurs utiles, il est préférable d'utiliser sprintf(target_string,"%d",source_int)
ou (mieux encore, car il est à l'abri des débordements de tampon) snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int)
. Je sais que ce n'est pas aussi concis ou cool que itoa()
, mais au moins vous pouvez Write Once, Run Everywhere (tm);-)
Voici l'ancienne réponse (modifiée)
Vous avez raison de dire que la valeur par défaut gcc libc
n'inclut pas itoa()
, comme plusieurs autres plates-formes, car il ne fait techniquement pas partie de la norme. Voir ici pour un peu plus d'infos. Notez que vous devez
#include <stdlib.h>
Bien sûr, vous le savez déjà, car vous vouliez utiliser itoa()
sous Linux après l'avoir vraisemblablement utilisé sur une autre plate-forme, mais... le code (volé du lien ci-dessus) ressemblerait à :
Exemple
/* itoa example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char buffer [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0;
}
Sortie :
Enter a number: 1750 decimal: 1750 hexadecimal: 6d6 binary: 11011010110
J'espère que cela vous aidera !
itoa
n'est pas une fonction C standard. Vous pouvez implémenter le vôtre. Il est apparu dans la première édition de Kernighan et Ritchie's Le langage de programmation C , à la page 60. La deuxième édition du langage de programmation C ("K&R2") contient l'implémentation suivante de itoa
, à la page 64. Le livre note plusieurs problèmes avec cette implémentation, notamment le fait qu'elle ne gère pas correctement le nombre le plus négatif
/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
La fonction reverse
utilisé ci-dessus est implémenté deux pages plus tôt :
#include <string.h>
/* reverse: reverse string s in place */
void reverse(char s[])
{
int i, j;
char c;
for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}