Проблема с преобразованием целого числа в строку itoa

Возможно, не очень важный вопрос, но только начиная с c. Почему это не скомпилируется правильно?

#include <stdio.h>
#include <stdlib.h>

void main()
{
int i = 15;
char word[100];

itoa (i,word,10);

printf("After conversion, int i = %d, char word = %s", i, word);
}

Я все время получаю сообщение об ошибке

Undefined symbols:
"_itoa", referenced from:
_main in ccubsVbJ.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

person kalaracey    schedule 07.04.2011    source источник
comment
Это нестандартная функция, и она может не входить в ваш stdlib.h. см. wikipedia, en.wikipedia.org/wiki/Itoa   -  person thelaws    schedule 07.04.2011
comment
Определите свой основной как int main(). Подробнее здесь: stackoverflow.com/ questions / 636829 /   -  person    schedule 07.04.2011
comment
все вопросы важны - для кого-то :-)   -  person AndersK    schedule 07.04.2011


Ответы (2)


Вместо этого используйте sprintf, itoa не является частью стандарта C и, вероятно, не включен в вашу реализацию stdlib.

sprintf(word,"%d",i);

ОБНОВИТЬ:

Как отмечено в комментариях, snprintf безопаснее использовать, чтобы избежать переполнения буфера. В этом случае это не обязательно, потому что ваш буфер длиннее, чем наибольшее целое число, которое может быть сохранено в 32-битном (или 64-битном целочисленном). Но хорошо помнить о переполнении буфера.

person GWW    schedule 07.04.2011
comment
Если возможно, вы должны использовать snprintf (), чтобы избежать переполнения буфера. - person Ben; 07.04.2011
comment
+1, хотя snprintf было бы лучше из-за потенциальных переполнений буфера с sprintf (хотя здесь не произойдет). - person David X; 07.04.2011
comment
Я согласен, что snprintf лучше, если вы можете переполнить буфер. - person GWW; 07.04.2011

itoa - нестандартная функция, ее нельзя включать в вашу реализацию. Вместо этого используйте что-нибудь вроде sprintf.

person jonsca    schedule 07.04.2011