我有一個整數數組:我怎麼能存儲的int數組轉換爲字符串
int a[5]={5,21,456,1,3}
我需要將這些號碼存儲到char
陣列,使得炭陣列都會有一些這樣的事:
char *s="52145613";
c對此有任何庫函數嗎?
我有一個整數數組:我怎麼能存儲的int數組轉換爲字符串
int a[5]={5,21,456,1,3}
我需要將這些號碼存儲到char
陣列,使得炭陣列都會有一些這樣的事:
char *s="52145613";
c對此有任何庫函數嗎?
您可以搜索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
。
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]);
你需要做的是將整數值轉換成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
明白了 - 沒有咖啡 - nuking ans。 –
試圖去一個更可讀的辦法,即使其他的答案中的內存和說明方面更有效。
已測試過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;
}
下面是一個演示程序,顯示瞭如何完成此操作。
#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
如果你把它保存這樣沒有分隔符,你將無法在事後解釋它.. – amdixon
'sprintf' - >'焦炭海峽[100] ; sprintf(str,「%d%d%d%d%d」,a [0],a [1],a [2],a [3],a [4]);' –
花了我一秒弄清楚@CoolGuy有正確的答案。如果數組的大小可變,則創建一個循環並連接字符串。 –