GNU/Linux >> Linux Esercitazione >  >> Linux

Dov'è la funzione itoa in Linux?

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

Linux
  1. Il comando locate in Linux

  2. Dove trovo la versione di un albero dei sorgenti del kernel Linux?

  3. Dove si trova bluetooth/bluetooth.h in Linux?

  4. Dove è definito ssize_t in Linux?

  5. Dov'è la pagina man per la funzione `sizeof` C?

Che cos'è la shell in Linux?

Dove sono i dati di configurazione archiviati in Linux

Il comando timer in Linux

Linux:dove viene effettivamente memorizzata la stringa dell'ambiente?

Dove posso trovare la prima versione del sistema operativo Linux?

Dov'è il file php.ini su un PC Linux/CentOS?