¿Cómo puedo convertir un int en una cadena en C?

Resuelto user1063999 asked hace 12 años • 11 respuestas

¿ Cómo se convierte un int(entero) en una cadena?

Estoy intentando crear una función que convierta los datos de a structen una cadena para guardarla en un archivo.

user1063999 avatar Nov 24 '11 20:11 user1063999
Aceptado

Puedes usar sprintfpara hacerlo, o tal vez snprintfsi lo tienes:

char str[ENOUGH];
sprintf(str, "%d", 42);

Donde el número de caracteres (más el carácter final) en se strpuede calcular usando:

(int)((ceil(log10(num))+1)*sizeof(char))
cnicutar avatar Nov 24 '2011 13:11 cnicutar

Como se señaló en un comentario, itoa()no es un estándar, así que es mejor utilizar el enfoque sprintf() sugerido en la respuesta rival.


Puede utilizar la itoa()función para convertir su valor entero en una cadena.

Aquí hay un ejemplo:

int num = 321;
char snum[5];

// Convert 123 to string [buf]
itoa(num, snum, 10);

// Print our string
printf("%s\n", snum);

Si desea generar su estructura en un archivo, no es necesario convertir ningún valor de antemano. Puede usar la especificación de formato printf para indicar cómo generar sus valores y usar cualquiera de los operadores de la familia printf para generar sus datos.

Alexander Galkin avatar Nov 24 '2011 13:11 Alexander Galkin

La respuesta corta es:

snprintf( str, size, "%d", x );

Cuanto más largo es: primero debes encontrar el tamaño suficiente. snprintfte dice la longitud si lo llamas con NULL, 0los primeros parámetros:

snprintf( NULL, 0, "%d", x );

Asigne un carácter más para el terminador nulo.

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

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

Si funciona para todos los formatos de cadena, puede convertir float o double en cadena usando "%g", puede convertir int a hexadecimal usando "%x", y así sucesivamente.

user2622016 avatar Sep 28 '2015 09:09 user2622016