GNU/Linux >> Tutoriales Linux >  >> Linux

¿Dónde está la función itoa en Linux?

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;
     }
}  

Linux
  1. ¿Dónde está el archivo de encabezado <conio.h> en Linux? ¿Por qué no puedo encontrar <conio.h>?

  2. ¿Dónde encuentro la versión de un árbol de fuentes del kernel de Linux?

  3. ¿Dónde se encuentra bluetooth/bluetooth.h en Linux?

  4. ¿Dónde se define ssize_t en Linux?

  5. ¿Dónde está la página del manual para la función C `sizeof`?

¿Qué es el Shell en Linux?

¿Dónde se almacenan los datos de configuración en Linux?

El comando del temporizador en Linux

Linux:¿dónde se almacena la cadena de entorno real?

¿Dónde puedo encontrar la primera versión del sistema operativo Linux?

¿Dónde está el archivo php.ini en una PC con Linux/CentOS?