EDIT:Scusa, avrei dovuto ricordare che questa macchina è decisamente non standard, avendo collegato vari libc
non standard implementazioni per scopi accademici;-)
Come itoa()
è davvero non standard, come menzionato da molti utili commentatori, è meglio usare sprintf(target_string,"%d",source_int)
o (meglio ancora, perché è al sicuro da buffer overflow) snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int)
. So che non è così conciso o interessante come itoa()
, ma almeno puoi scrivere una volta, correre ovunque (tm);-)
Ecco la vecchia risposta (modificata)
Hai ragione nell'affermare che il valore predefinito gcc libc
non include itoa()
, come molte altre piattaforme, perché tecnicamente non fa parte dello standard. Vedi qui per qualche informazione in più. Nota che devi
#include <stdlib.h>
Ovviamente lo sai già, perché volevi usare itoa()
su Linux dopo averlo presumibilmente utilizzato su un'altra piattaforma, ma... il codice (rubato dal link sopra) sarebbe simile a:
Esempio
/* 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;
}
Uscita:
Enter a number: 1750 decimal: 1750 hexadecimal: 6d6 binary: 11011010110
Spero che questo aiuti!
itoa
non è una funzione C standard. Puoi implementare il tuo. È apparso nella prima edizione di Kernighan e da Ritchie Il linguaggio di programmazione C , a pagina 60. La seconda edizione di The C Programming Language ("K&R2") contiene la seguente implementazione di itoa
, a pagina 64. Il libro rileva diversi problemi con questa implementazione, incluso il fatto che non gestisce correttamente il numero più negativo
/* 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 funzione reverse
usato sopra è implementato due pagine prima:
#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;
}
}