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