2011-01-17 5 views
7

У меня есть массив целых чисел int example[5] = {1,2,3,4,5}. Теперь я хочу преобразовать их в массив символов, используя C, а не C++. Как мне это сделать?Преобразование массива int в массив char

+2

Что 1,2,3,4,5 стоять? Какие разумные преобразования вы ожидаете? Добавьте пример к своему вопросу. – Aamir

+0

вы можете использовать sprintf – Marii

+0

Его опечатка ... его int example [5] – Allwyn

ответ

8

В зависимости от того, что вы действительно хотите, есть несколько возможных ответов на этот вопрос:

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

Straight копировальных управляющие символы давая ASCII 1 - 5

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

символы '1' - «5 '

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

строки, представляющий 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); 
} 
+1

Что делать, если целое число больше, чем '9'? Целые числа выше '10' не будут преобразованы в формат символов. – Stallman

1

Вы можете преобразовать один значное-целое число в соответствующий символ, используя это выражение:

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

Обратите внимание, что это только справедливо, конечно, для однозначных цифр. Экстраполирование вышеуказанного для работы с массивами должно быть прямым.

0

Вам необходимо создать массив, потому что sizeof(int) (почти наверняка) отличается от sizeof(char)==1.

Имейте петлю, в которой вы делаете char_example[i] = example[i].


Если то, что вы хотите, чтобы преобразовать целое число в строку, вы можете просто подвести ваше целое число '0', но только если вы уверены, что ваше целое число от 0 до 9, в противном случае вам нужно чтобы использовать некоторые более сложные, такие как sprintf.

2
#include <stdio.h> 

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; 
} 

Выходы:

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

Ваш ответ будет работать только для чисел до 999, после чего он начнет усекать цифры - INT_MAX для целого числа дополнений 32 бит 2 - это 2147483647, который как более 3 цифр (один из четырех выбран с помощью '' \ 0 '') – JeremyP

+0

@JeremyP Я понимаю, что вы имеете в виду, спасибо. – karlphillip

0

В чистом C Я хотел бы сделать это следующим образом:

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

Malloc-cast не является «чистым C», его C++. – user411313

Смежные вопросы