2011-03-25 18 views
10

Estoy tratando de convertir un entero a un personaje para escribir en un archivo, usando esta línea:C Error: undefined reference to '_itoa'

fputc(itoa(size, tempBuffer, 10), saveFile); 

y recibir esta advertencia y mensaje:

advertencia: declaración implícita de 'itoa'

referencia indefinida a '_itoa'

yo ya he incluido stdlib. h, y estoy compilando con:

gcc -Wall -pedantic -ansi 

Cualquier ayuda sería apreciada, gracias.

+1

Supongo que itoa puede no estar presente en la biblioteca C estándar que está utilizando. Podría intentar especificar la bandera '-fpermissive' para ver si el código funciona. – GWW

+1

No existe una función como 'itoa' en la biblioteca estándar" oficial ". Aparentemente, la biblioteca estándar que está utilizando no proporciona 'itoa'. Tus banderas '-pedantic' y' -ansi' no servirán de nada. Por el contrario, pueden empeorar las cosas al ocultar funciones no estándar (no sé si realmente lo hacen). Intenta compilar sin ellos. – AnT

Respuesta

22

itoa no es parte de la norma. Sospecho que -ansi le impide usarlo o que no está disponible.

se recomienda usar sprintf()

Si vas con el estándar C99, puede utilizar snprintf() que por supuesto es más seguro.

char buffer[12]; 
int i = 20; 
snprintf(buffer, 12,"%d",i); 
+1

Necesita un búfer más grande para manejar el signo negativo. – RocketRoy

+1

@RocketRoy en realidad fue simplemente un ejemplo. El valor '20' en el ejemplo encaja perfectamente en' char [10] 'y ese es el tamaño del búfer que el OP estaba usando. Pero sí, un int firmado de 32 bits requeriría 'char [12]' para manejar el signo y '\ 0' –

+1

@BrianRoach mientras que usted tiene toda la razón, por el bien de las personas que les gusta copiar pegar, he cambiado el tamaño de el buffer en el ejemplo. – chacham15

2

Esto aquí se dice que durante la fase de compilación itoa es desconocida:

warning: implicit declaration of 'itoa'

por lo que si esta función está presente en su sistema se echa en falta un archivo de cabecera que lo declara. El compilador luego supone que es una función que toma un número inespecífico de argumentos y devuelve un int.

Este mensaje de la fase cargador

undefined reference to '_itoa'

también explica que el cargador no encuentra una función de este tipo en cualquiera de las bibliotecas que conoce de.

Así que tal vez debería seguir los consejos de Brian para reemplazar itoa por una función estándar.