EDIT : Désolé, j'aurais dû me rappeler que cette machine est décidément non standard, et que j'ai branché plusieurs appareils non standard. libc
mises en œuvre à des fins académiques ;-)
Comme itoa()
n'est en effet pas standard, comme l'ont mentionné plusieurs commentateurs utiles, il est préférable d'utiliser l'option sprintf(target_string,"%d",source_int)
ou (mieux encore, parce qu'il est à l'abri des débordements de mémoire 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 écrire une fois, courir partout (tm) ;-)
Voici l'ancienne réponse (modifiée)
Vous avez raison de dire que le défaut gcc libc
ne comprend pas itoa()
comme plusieurs autres plateformes, car il ne fait pas techniquement partie de la norme. Voir ici pour un peu plus d'informations. Notez que vous devez
#include <stdlib.h>
Bien sûr, vous le savez déjà, parce que vous vouliez utiliser itoa()
sous Linux après l'avoir vraisemblablement utilisé sur une autre plateforme, mais... le code (volé du lien ci-dessus) ressemblerait à ceci :
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 !
4 votes
Toute raison de ne pas utiliser
sprintf(str, "%d", num)
? est-il beaucoup plus lent queitoa
?5 votes
@javapowered, pour commencer,
itoa
permet une conversion arbitraire des bases,printf
les spécificateurs ne le font pas.0 votes
@javapowered sprintf() n'est pas sûr du signal
0 votes
Toute raison de ne pas utiliser
gcvt()
à partir de la bibliothèque standard ?