C:将int []转换为字符串

问题描述:

从技术上讲,我意识到它们有点不同,因为数组是null终止的。但是寻找一种方式来C:将int []转换为字符串

int charArray[] = {'h', 'e', 'l', 'l', 'o'}; //ascii chars = ints 

转换为

char *string; 
+0

对数组值使用'{}'而不是'[]'。 –

+0

张贴我的答案后,现在我真的怀疑你的'int'是一个错字。毕竟,该变量有一个名字'charArray'。 –

+0

Yu,在这里处理ASCII字符,所以底层整数... – Live2Enjoy7

由于charArray不是字符串,则无法使用标准功能,如strcpy(),或strlen()。相反,复制每个字符,并在最后添加'\0'sizeof(charArray)/sizeof(int)可以告诉你要复制多少个字符。

size_t sz = sizeof(charArray)/sizeof(int); 
char *string = malloc(sz + 1); 
for (int i = 0; i < sz; i++) 
{ 
    string[i] = charArray[i]; 
} 
string[sz] = '\0'; 
+0

嗯,如果我想把这个分解成一个函数,你会如何建议我传入charArray [i]? – Live2Enjoy7

+1

@ Live2Enjoy7将数组作为函数参数传递时要小心,因为它会转换为指针,因此'sizeof'会给出指针的大小而不是数组。你可以考虑把数组的大小作为另一个参数传递,比如'func(int array [],size_t size)' –

+0

不幸的是编译器抱怨字符串[i] = charArray [i]说预期表达式 – Live2Enjoy7

不能在cint[]char *之间的转换。您可以遍历数组,然后使用所需值构建一个char*,但是,然后将\0添加到最后。您也可以使用(char*) charArray进行类型转换,但这很容易出现很多问题,比如缺少\0终止符。例如,它不适用于strcpy

char arr[] = {'h','e','l'}; 
string str(arr); 
cout<<str<<endl; // output hel 
+0

他可能只问C代码 – const

+0

对不起,我还没有看到标签。 – Emu

charArrayint[8]型,其中作为stringchar *型的。他们是不同的和不兼容的类型,你不能将一个转换成另一个。你可以做的是定义一个足够大小的字符数组,然后将charArray中的整数(隐式转换为char类型)复制到它中。

// length of charArray 

int length = sizeof charArray/sizeof charArray[0]; 

char string[length + 1]; // +1 for the null byte 
for(int i = 0; i < length; i++) 
    string[i] = charArray[i]; // copy the characters 
string[i] = '\0'; // add the terminating null byte