2011-01-17 19 views
7

Ich habe ein Array von Ganzzahl sagen int example[5] = {1,2,3,4,5}. Jetzt möchte ich sie in Zeichen-Array mit C, nicht C++ konvertieren. Wie kann ich es tun?Konvertieren von int-Array in char-Array

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

Beachten Sie, dass dies nur dann gültig ist, natürlich, für einzelne Ziffern: mit diesem Ausdruck

+2

Was bedeutet 1,2,3,4,5 stehen? Welche Conversions erwarten Sie? Bitte fügen Sie ein Beispiel zu Ihrer Frage hinzu. – Aamir

+0

können Sie sprintf verwenden – Marii

+0

Es ist ein Tippfehler ... seine int Beispiel [5] – Allwyn

Antwort

8

Je nachdem, was Sie wirklich wollen, gibt es mehrere mögliche Antworten auf diese Frage:

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

Gerade Kopie geben ASCII-Steuerzeichen 1 - 5

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

Zeichen '1' - ‚5 "

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

strings repräsentiere 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

Was ist, wenn die ganze Zahl größer ist als '9'? Ganzzahlen über '10' werden nicht in das Zeichenformat konvertiert. – Stallman

1

Sie können einen einstelligen ganzzahligen in das entsprechende Zeichen umwandeln. Extrapolieren der oben genannten, um gegen Arrays zu arbeiten, sollte geradlinig sein.

0

Sie müssen das Array erstellen, da sich sizeof(int) (fast sicher) von sizeof(char)==1 unterscheidet.

Haben Sie eine Schleife, in der Sie char_example[i] = example[i] tun.


Wenn das, was Sie wollen, ist zu konvertieren eine ganze Zahl in eine Zeichenfolge könnten Sie einfach Ihre ganze Zahl '0' Summe aber nur, wenn Sie sicher sind, dass Ihre ganze Zahl zwischen 0 und 9 ist, müssen Sie anders etwas raffinierter zu verwenden wie 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; 
} 

Ausgänge:

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

Ihre Antwort wird nur für Zahlen bis zu 999 funktionieren, danach beginnt es Ziffern zu schneiden - INT_MAX für eine 32 Bit 2er Komplement Integer ist 2147483647 was mehr als 3 Ziffern (eine Ihrer vier wird mit '\ 0 '') – JeremyP

+0

@ JeremyP Ich sehe was du meinst, danke. – karlphillip

0

In reinem C ich es so tun würde:

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

Ein Malloc-Cast ist nicht "reines C", sein C++. – user411313