GNU/Linux >> Znalost Linux >  >> Linux

Kde je funkce itoa v Linuxu?

EDIT:Promiňte, měl jsem si pamatovat, že tento stroj je rozhodně nestandardní, protože jsem zapojil různé nestandardní libc implementace pro akademické účely;-)

Jako itoa() je skutečně nestandardní, jak zmínilo několik užitečných komentátorů, je nejlepší použít sprintf(target_string,"%d",source_int) nebo (ještě lépe, protože je to bezpečné před přetečením vyrovnávací paměti) snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int) . Vím, že to není tak stručné nebo cool jako itoa() , ale aspoň můžeš napsat jednou, běž všude (tm);-)

Zde je stará (upravená) odpověď

Máte pravdu, když uvádíte, že výchozí gcc libc nezahrnuje itoa() , stejně jako několik jiných platforem, protože není technicky součástí standardu. Více informací naleznete zde. Všimněte si, že musíte

#include <stdlib.h>

To už samozřejmě víte, protože jste to chtěli použít itoa() na Linuxu poté, co jej pravděpodobně použijete na jiné platformě, ale... kód (ukradený z výše uvedeného odkazu) by vypadal takto:

Příklad

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

Výstup:

Enter a number: 1750
decimal: 1750
hexadecimal: 6d6
binary: 11011010110

Doufám, že to pomůže!


itoa není standardní funkce C. Můžete implementovat své vlastní. Objevilo se v prvním vydání Kernighan a Ritchieho Programovací jazyk C , na straně 60. Druhé vydání The C Programming Language ("K&R2") obsahuje následující implementaci itoa , na straně 64. Kniha uvádí několik problémů s touto implementací, včetně skutečnosti, že nepracuje správně s nejzápornějším číslem

 /* 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);
}  

Funkce reverse použitý výše je implementován o dvě stránky dříve:

 #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. Vyhledejte příkaz v Linuxu

  2. Kde je v Linuxu definován PATH_MAX?

  3. Kde najdu verzi zdrojového stromu linuxového jádra?

  1. Kde je manuálová stránka pro funkci `sizeof` C?

  2. Kde se ve Windows 10 nachází souborový systém subsystému Linux?

  3. Linux:Kam umístit odkládací soubor

  1. Zvládněte příkaz Linux ls

  2. Kde je hlavičkový soubor <conio.h> v systému Linux? Proč nemohu najít <conio.h>?

  3. Kde se nachází bluetooth/bluetooth.h v Linuxu?