從技術上講,我意識到它們有點不同,因爲數組是null終止的。但是尋找一種方式來C:將int []轉換爲字符串
int charArray[] = {'h', 'e', 'l', 'l', 'o'}; //ascii chars = ints
轉換爲
char *string;
從技術上講,我意識到它們有點不同,因爲數組是null終止的。但是尋找一種方式來C:將int []轉換爲字符串
int charArray[] = {'h', 'e', 'l', 'l', 'o'}; //ascii chars = ints
轉換爲
char *string;
由於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';
嗯,如果我想把這個分解成一個函數,你會如何建議我傳入charArray [i]? – Live2Enjoy7
@ Live2Enjoy7將數組作爲函數參數傳遞時要小心,因爲它會轉換爲指針,因此'sizeof'會給出指針的大小而不是數組。你可以考慮把數組的大小作爲另一個參數傳遞,比如'func(int array [],size_t size)' –
不幸的是編譯器抱怨字符串[i] = charArray [i]說預期表達式 – Live2Enjoy7
不能在c
int[]
和char *
之間的轉換。您可以遍歷數組,然後使用所需值構建一個char*
,但是,然後將\0
添加到最後。您也可以使用(char*) charArray
進行類型轉換,但這很容易出現很多問題,比如缺少\0
終止符。例如,它不適用於strcpy
。
charArray
是int[8]
型,其中作爲string
是char *
型的。他們是不同的和不兼容的類型,你不能將一個轉換成另一個。你可以做的是定義一個足夠大小的字符數組,然後將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
對數組值使用'{}'而不是'[]'。 –
張貼我的答案後,現在我真的懷疑你的'int'是一個錯字。畢竟,該變量有一個名字'charArray'。 –
Yu,在這裏處理ASCII字符,所以底層整數... – Live2Enjoy7