EDITAR:Lo siento, debería haber recordado que esta máquina definitivamente no es estándar, ya que conecté varios libc
no estándar implementaciones con fines académicos;-)
Como itoa()
es de hecho no estándar, como lo mencionan varios comentaristas útiles, es mejor usar sprintf(target_string,"%d",source_int)
o (mejor aún, porque está a salvo de desbordamientos de búfer) snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int)
. Sé que no es tan conciso ni genial como itoa()
, pero al menos puedes escribir una vez, ejecutar en todas partes (tm);-)
Esta es la respuesta anterior (editada)
Tiene razón al afirmar que el gcc libc
predeterminado no incluye itoa()
, como varias otras plataformas, debido a que técnicamente no es parte del estándar. Ver aquí para un poco más de información. Tenga en cuenta que debe
#include <stdlib.h>
Por supuesto que ya sabes esto, porque querías usar itoa()
en Linux después de presumiblemente usarlo en otra plataforma, pero... el código (robado del enlace de arriba) se vería así:
Ejemplo
/* 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;
}
Salida:
Enter a number: 1750 decimal: 1750 hexadecimal: 6d6 binary: 11011010110
¡Espero que esto ayude!
itoa
no es una función estándar de C. Puedes implementar el tuyo propio. Apareció en la primera edición de Kernighan y Ritchie's El lenguaje de programación C , en la página 60. La segunda edición de El lenguaje de programación C ("K&R2") contiene la siguiente implementación de itoa
, en la página 64. El libro señala varios problemas con esta implementación, incluido el hecho de que no maneja correctamente el número más 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 función reverse
utilizado anteriormente se implementa dos páginas antes:
#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;
}
}