2011-06-24 18 views
19

Tengo un archivo de ejemplo c llama itoa.cpp de la siguiente manera:error: `itoa` no estaba declarado en este ámbito

#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); 
    return 0; 
} 

cuando compilo el código anterior con el siguiente comando:

 
gcc itoa.cpp -o itoa 

estoy recibiendo este error:

 
[[email protected] u02]# gcc itoa.cpp -o itoa 
itoa.cpp: In function "int main()": 
itoa.cpp:10: error: "itoa" was not declared in this scope 

¿Qué está mal en este código? ¿Cómo deshacerse de esto?

+1

Está utilizando gcc para compilar un archivo llamado .cpp, esto lo compilará como C, no solo eso, sino que todos los encabezados que está incluyendo son biblioteca C estándar. –

Respuesta

22

itoa no es un estándar ansi C y probablemente deba evitarlo. Aquí están algunas implementaciones liar su propia si realmente desea utilizar de todos modos:

http://www.strudel.org.uk/itoa/

Si necesita dar formato a cadenas de memoria, una mejor opción es utilizar snprintf. Trabajando a partir de su ejemplo:

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

int main() 
{ 
    int i; 
    char buffer [33]; 
    printf ("Enter a number: "); 
    scanf ("%d",&i); 
    snprintf(buffer, sizeof(buffer), "%d", i); 
    printf ("decimal: %s\n",buffer); 
    return 0; 
} 
5

Si sólo está interesado en la base 10, 8 o 16. Usted puede usar sprintf

sprintf(buf,"%d",i); 
+0

Si uso snprintf como lo menciona Mikola, y compilo el programa como: gcc itoa.cpp -o itoa, obtengo este error: [root @ inhyuvelite1 u02] # gcc itoa.cpp -o itoa /tmp/ccUB2wBP .o :(. eh_frame + 0x12): referencia indefinida a '__gxx_personality_v0 ' collect2: ld devuelto 1 estado de salida – vchitta

+5

Probablemente deberías recomendar snprintf sobre sprintf. –

+1

@ user771245: Está compilando el código de C++ con un compilador de C. Usa g ++ O cambie el nombre de su archivo a itoa.c –

4

Mira en stdlib.h. Tal vez _itoa en cambio itoa se definió allí.

+0

Ese fue mi caso. #include Combine

Cuestiones relacionadas