BEARBEITEN:Entschuldigung, ich hätte daran denken sollen, dass diese Maschine entschieden nicht standardmäßig ist, nachdem ich verschiedene nicht standardmäßige libc
angeschlossen hatte Implementierungen für akademische Zwecke;-)
Als itoa()
tatsächlich kein Standard ist, wie von mehreren hilfreichen Kommentatoren erwähnt, ist es am besten, sprintf(target_string,"%d",source_int)
zu verwenden oder (noch besser, weil es vor Pufferüberläufen sicher ist) snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int)
. Ich weiß, es ist nicht ganz so prägnant oder cool wie itoa()
, aber zumindest kannst du Write Once, Run Everywhere (tm);-)
Hier ist die alte (bearbeitete) Antwort
Sie geben zu Recht an, dass der Standardwert gcc libc
enthält nicht itoa()
, wie mehrere andere Plattformen, da es technisch gesehen nicht Teil des Standards ist. Sehen Sie hier für ein wenig mehr Informationen. Beachten Sie, dass Sie
#include <stdlib.h>
Das wissen Sie natürlich schon, weil Sie es benutzen wollten itoa()
unter Linux, nachdem Sie es vermutlich auf einer anderen Plattform verwendet haben, aber ... der Code (gestohlen vom obigen Link) würde so aussehen:
Beispiel
/* 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;
}
Ausgabe:
Enter a number: 1750 decimal: 1750 hexadecimal: 6d6 binary: 11011010110
Hoffe, das hilft!
itoa
ist keine Standard-C-Funktion. Sie können Ihre eigenen implementieren. Es erschien in der ersten Ausgabe von Kernighan und Ritchies Die Programmiersprache C , auf Seite 60. Die zweite Ausgabe von The C Programming Language ("K&R2") enthält die folgende Implementierung von itoa
, auf Seite 64. Das Buch weist auf mehrere Probleme mit dieser Implementierung hin, einschließlich der Tatsache, dass die negativste Zahl nicht korrekt behandelt wird
/* 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);
}
Die Funktion reverse
oben verwendet wird zwei Seiten früher implementiert:
#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;
}
}