Как преобразовать целое число в строку в C?
Я попробовал этот пример:
/* 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;
}
но пример там не работает (он говорит, что функция itoa
не существует).
Ответы
Ответ 1
Используйте sprintf()
:
int someInt = 368;
char str[12];
sprintf(str, "%d", someInt);
Все числа, которые представляются int
, будут помещаться в 12- char -array без переполнения, если только ваш компилятор не использует более 32 бит для int
. При использовании номеров с большей битацией, например. long
с большинством 64-разрядных компиляторов, вам необходимо увеличить размер массива - не менее 21 символа для 64-битных типов.
Ответ 2
Создание собственного itoa
также легко, попробуйте следующее:
char* itoa(int i, char b[]){
char const digit[] = "0123456789";
char* p = b;
if(i<0){
*p++ = '-';
i *= -1;
}
int shifter = i;
do{ //Move to where representation ends
++p;
shifter = shifter/10;
}while(shifter);
*p = '\0';
do{ //Move back, inserting digits as u go
*--p = digit[i%10];
i = i/10;
}while(i);
return b;
}
или используйте стандартную функцию sprintf()
.
Ответ 3
Это потому, что itoa
не является стандартной функцией. Вместо этого попробуйте snprintf
.
char str[LEN];
snprintf(str, LEN, "%d", 42);