2014-02-20 217 views
1

從技術上講,我意識到它們有點不同,因爲數組是null終止的。但是尋找一種方式來C:將int []轉換爲字符串

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

轉換爲

char *string; 
+0

對數組值使用'{}'而不是'[]'。 –

+0

張貼我的答案後,現在我真的懷疑你的'int'是一個錯字。畢竟,該變量有一個名字'charArray'。 –

+0

Yu,在這裏處理ASCII字符,所以底層整數... – Live2Enjoy7

回答

2

由於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

1

不能在cint[]char *之間的轉換。您可以遍歷數組,然後使用所需值構建一個char*,但是,然後將\0添加到最後。您也可以使用(char*) charArray進行類型轉換,但這很容易出現很多問題,比如缺少\0終止符。例如,它不適用於strcpy

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

他可能只問C代碼 – const

+0

對不起,我還沒有看到標籤。 – Emu

0

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