2015-05-14 70 views
-1

我有一個整數數組:我怎麼能存儲的int數組轉換爲字符串

int a[5]={5,21,456,1,3} 

我需要將這些號碼存儲到char陣列,使得炭陣列都會有一些這樣的事:

char *s="52145613"; 

對此有任何庫函數嗎?

+1

如果你把它保存這樣沒有分隔符,你將無法在事後解釋它.. – amdixon

+1

'sprintf' - >'焦炭海峽[100] ; sprintf(str,「%d%d%d%d%d」,a [0],a [1],a [2],a [3],a [4]);' –

+0

花了我一秒弄清楚@CoolGuy有正確的答案。如果數組的大小可變,則創建一個循環並連接字符串。 –

回答

1

您可以搜索sprintf()/ snprintf(),它可以爲您完成工作。

從手冊頁,

int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t size, const char *format, ...);

根據格式,如下所述在printf()家庭產生輸出的功能。 ... [...] ...

sprintf()snprintf()vsprintf()vsnprintf()寫入字符串str

5

sprintf做你所需要的。

小例子

char str[128]; 
int i=0; 
int index = 0; 
for (i=0; i<5; i++) 
    index += sprintf(&str[index], "%d", a[i]); 

snprintf採取STR長度

char str[128]; 
int i=0; 
int index = 0; 
for (i=0; i<5; i++) 
    index += snprintf(&str[index], 128-index, "%d", a[i]); 
+0

@WoodrowBarlow是的,我編輯 – LPs

+1

請注意'snprintf()'返回一個負值以防出錯。將此值添加到'index'將是錯誤的。 – scai

2

你需要做的是將整數值轉換成a成字符值s留有餘地空的護理 - 終止性格。在你的情況下共有9個字符。 sprintf是正確的工具,因爲瓦萊斯超過個位數:

#include <stdio.h> 

int main(void) 
{ 
    int a[5]={5,21,456,1,3}; 
    char s[9] = {0}; 
    int n = 0; 

    for (int i = 0; i < 5; i++) { 
     n += sprintf (&s[n], "%d", a[i]); 
    } 

    printf ("\n char* s = %s\n\n", s); 

    return 0; 
} 

輸出

$ ./bin/sprintf 

char* s = 52145613 
+0

明白了 - 沒有咖啡 - nuking ans。 –

2

試圖去一個更可讀的辦法,即使其他的答案中的內存和說明方面更有效。

已測試過here

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

void get_me_a_string(int * int_array, int array_size, char * output_string, int output_string_max_size) 
{ 
    if(!int_array || !output_string) 
     return; 

    char * aux_string = NULL; 

    //Depending on the compiler int is 2-byte or 4 byte. 
    //Meaning INT_MAX will be at most 2147483647 (10 characters + 1 '\0'). 
    aux_string = (char *) malloc(11); 
    if(!aux_string) 
     return; 

    int i; 
    int current_array_size = 0; 
    for(i = 0; i < array_size; i++) 
    { 
     sprintf(aux_string, "%d", int_array[i]); 
     current_array_size += strlen(aux_string); 
     if(current_array_size < output_string_max_size) 
      strcat(output_string, aux_string); 
     else 
      break; 
    } 

    free(aux_string); 
} 

int main(void) { 
    int a[5]={5,21,456,1,3}; 

    int string_max_size = 256; 
    char * string_from_array = NULL; 

    string_from_array = (char *) malloc(string_max_size); 

    if(NULL == string_from_array) 
    { 
     printf("Memory allocation failed. Exiting..."); 
     return 1; 
    } 

    memset(string_from_array, 0, string_max_size); 
    get_me_a_string(a, 5, string_from_array, string_max_size); 

    printf(string_from_array); 

    free(string_from_array); 
    return 0; 
} 
0

下面是一個演示程序,顯示瞭如何完成此操作。

#include <stdio.h> 

int main(void) 
{ 
    int a[] = { 5, 21, 456, 1, 3 }; 
    const size_t N = sizeof(a)/sizeof(*a); 
    char s[10]; 
    int n; 

    for (size_t i = 0, j = 0; 
      i < N && (n = snprintf(s + j, sizeof(s) - j, "%d", a[i])) > 0; 
      i++) 
    { 
     j += n; 
    }   

    puts(s); 

    return 0; 
} 

程序輸出是

52145613 
相關問題