Convertir int array en char array

Tengo una matriz de enteros, por ejemplo, int example[5] = {1,2,3,4,5} . Ahora quiero convertirlos en una matriz de caracteres usando C, no C ++. ¿Cómo puedo hacerlo?

Dependiendo de lo que realmente quieras, hay varias respuestas posibles a esta pregunta:

 int example[5] = {1,2,3,4,5}; char output[5]; int i; 

Copia recta dando caracteres de control ASCII 1 – 5

 for (i = 0 ; i < 5 ; ++i) { output[i] = example[i]; } 

caracteres '1' - '5'

 for (i = 0 ; i < 5 ; ++i) { output[i] = example[i] + '0'; } 

cuerdas que representan 1 - 5.

 char stringBuffer[20]; // Needs to be more than big enough to hold all the digits of an int char* outputStrings[5]; for (i = 0 ; i < 5 ; ++i) { snprintf(stringBuffer, 20, "%d", example[i]); // check for overrun omitted outputStrings[i] = strdup(stringBuffer); } 
 #include  int main(void) { int i_array[5] = { 65, 66, 67, 68, 69 }; char* c_array[5]; int i = 0; for (i; i < 5; i++) { //c[i] = itoa(array[i]); /* Windows */ /* Linux */ // allocate a big enough char to store an int (which is 4bytes, depending on your platform) char c[sizeof(int)]; // copy int to char snprintf(c, sizeof(int), "%d", i_array[i]); //copy those 4bytes // allocate enough space on char* array to store this result c_array[i] = malloc(sizeof(c)); strcpy(c_array[i], c); // copy to the array of results printf("c[%d] = %s\n", i, c_array[i]); //print it } // loop again and release memory: free(c_array[i]) return 0; } 

Salidas:

 c[0] = 65 c[1] = 66 c[2] = 67 c[3] = 68 c[4] = 69 

Puede convertir un solo dígito-entero en el carácter correspondiente usando esta expresión:

 int intDigit = 3; char charDigit = '0' + intDigit; /* Sets charDigit to the character '3'. */ 

Tenga en cuenta que esto solo es válido, por supuesto, para un solo dígito. La extrapolación de lo anterior para trabajar contra matrices debe ser directa.

Debe crear la matriz, porque sizeof(int) es (casi seguro) diferente de sizeof(char)==1 .

Tenga un bucle en el que haga char_example[i] = example[i] .


Si lo que quieres es convertir un número entero en una cadena, puedes sumr tu número entero a '0' pero solo si estás seguro de que tu número entero está entre 0 y 9, de lo contrario necesitarás usar un poco más sofisticado como sprintf .

En CI pura lo haría así:

 char** makeStrArr(const int* vals, const int nelems) { char** strarr = (char**)malloc(sizeof(char*) * nelems); int i; char buf[128]; for (i = 0; i < nelems; i++) { strarr[i] = (char*)malloc(sprintf(buf, "%d", vals[i]) + 1); strcpy(strarr[i], buf); } return strarr; } void freeStrArr(char** strarr, int nelems) { int i = 0; for (i = 0; i < nelems; i++) { free(strarr[i]); } free(strarr); } void iarrtostrarrinc() { int i_array[] = { 65, 66, 67, 68, 69 }; char** strarr = makeStrArr(i_array, 5); int i; for (i = 0; i < 5; i++) { printf("%s\n", strarr[i]); } freeStrArr(strarr, 5); }