Convirtiendo int a cadena en C

4 minutos de lectura

avatar de usuario
Shweta

estoy usando el itoa() función para convertir un int dentro stringpero está dando un error:

undefined reference to `itoa'
collect2: ld returned 1 exit status

¿Cuál es la razón? ¿Hay alguna otra forma de realizar esta conversión?

  • sí, he incluido stdlib.h pero aún no funciona

    – Shweta

    9 de marzo de 2011 a las 7:20

  • Posible duplicado de Cómo convertir un int a cadena en C

    – Ciro Santilli Путлер Капут 六四事

    1 de septiembre de 2018 a las 9:50

avatar de usuario
edwin dólar

Utilizar snprintfes más portátil que itoa.

itoa no es parte del estándar C, ni es parte del estándar C++; pero muchos compiladores y bibliotecas asociadas lo admiten.

Ejemplo de sprintf

char* buffer = ... allocate a buffer ...
int value = 4564;
sprintf(buffer, "%d", value);

Ejemplo de snprintf

char buffer[10];
int value = 234452;
snprintf(buffer, 10, "%d", value);

Ambas funciones son similares a fprintf, pero la salida se escribe en una matriz en lugar de en una secuencia. La diferencia entre sprintf y snprintf es eso snprintf garantiza que no se desborde el búfer al escribir hasta un número máximo de caracteres que se pueden almacenar en el buffer.

  • me puedes ayudar con algun ejemplo

    – Shweta

    9 de marzo de 2011 a las 7:21

  • Ahora tienes un ejemplo, o dos.

    – Edwin Buck

    9 de marzo de 2011 a las 7:27

  • Otra diferencia entre sprintf anuncio snprintf es el estándar en el que se describen: C89 (y posteriores) para sprintf; C99 para snprintf. En particular, la biblioteca de Windows carece de la snprintf función o tiene un comportamiento diferente al descrito en la Norma.

    – pmg

    9 de marzo de 2011 a las 10:06

  • ME SALVÓ a las 2:08 am estaba teniendo problemas con mi compilador porque no era compatible con itoa, gracias.

    – thekevshow

    22 de diciembre de 2015 a las 7:09

  • Es snprintfponiendo '\0' al último elemento de mi matriz? Entonces, ¿puedo saber dónde termina?

    – Silidrona

    20 de noviembre de 2016 a las 9:30

Utilizar snprintf – es estándar y está disponible en todos los compiladores. Consúltelo por el tamaño necesario llamándolo con NULL, 0 parámetros Asigne un carácter más para nulo al final.

int length = snprintf( NULL, 0, "%d", x );
char* str = malloc( length + 1 );
snprintf( str, length + 1, "%d", x );
...
free(str);

avatar de usuario
Mirwise Khan

Antes de continuar, debo advertirles que itoa NO es una función ANSI, no es una función C estándar. Deberías usar sprintf para convertir un int en una cadena.

itoa toma tres argumentos.

  • El primero es el entero a convertir.
  • El segundo es un puntero a una matriz de caracteres: aquí es donde se almacenará la cadena. El programa puede fallar si pasa en un char * variable, por lo que debe pasar una matriz de caracteres de tamaño normal y funcionará bien.
  • El último NO es del tamaño de la matriz, pero es la BASE de su número: la base 10 es la que es más probable que use.

La función devuelve un puntero a su segundo argumento, donde ha almacenado la cadena convertida.

itoa es una función muy útil, que es compatible con algunos compiladores; es una pena que no sea compatible con todos, a diferencia de atoi.

Si aún desea utilizar itoa, así es como debe usarlo. De lo contrario, tienes otra opción usando sprintf (siempre que desee una salida base 8, 10 o 16):

char str[5];
printf("15 in binary is %s\n",  itoa(15, str, 2));

avatar de usuario
Shamim Hafiz – MSFT

Mejor usa sprintf(),

char stringNum[20];
int num=100;
sprintf(stringNum,"%d",num);

Generalmente snprintf() es el camino a seguir:

char str[16]; // could be less but i'm too lazy to look for the actual the max length of an integer
snprintf(str, sizeof(str), "%d", your_integer);

avatar de usuario
kenorb

Puedes hacer el tuyo itoacon esta función:

void my_utoa(int dataIn, char* bffr, int radix){
int temp_dataIn;
temp_dataIn = dataIn;
int stringLen=1;

while ((int)temp_dataIn/radix != 0){
    temp_dataIn = (int)temp_dataIn/radix;
    stringLen++;
}
//printf("stringLen = %d\n", stringLen);
temp_dataIn = dataIn;
do{
    *(bffr+stringLen-1) = (temp_dataIn%radix)+'0';
    temp_dataIn = (int) temp_dataIn / radix;
}while(stringLen--);}

y este es un ejemplo:

char buffer[33];
int main(){
  my_utoa(54321, buffer, 10);
  printf(buffer);
  printf("\n");

  my_utoa(13579, buffer, 10);
  printf(buffer);
  printf("\n");
}

avatar de usuario
Gewure

void itos(int value, char* str, size_t size) {
    snprintf(str, size, "%d", value);
}

..funciona con llamar por referencia. Úselo así, por ejemplo:

int someIntToParse;
char resultingString[length(someIntToParse)];

itos(someIntToParse, resultingString, length(someIntToParse));

ahora resultingString sostendrá su C-‘cadena’.

  • Esto funcionará solo para la conversión decimal (base 10).

    – microMolvi

    24 de agosto de 2017 a las 11:29

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad