2010-12-17 215 views
4

我很好奇C如何處理數組初始化。我在我的程序中有以下代碼:C數組初始化

UChar match[] = {0xdf, 'a', 'b', '\0'}; 

基本上,這是初始化一個UTF-16字符串。在這種情況下,UChar是16位。我的問題是:我需要在字符串末尾的尾部NULL字節,但它是必要包括它在初始化或將C自動包括所有數組初始化?

+0

取決於數組是否固定。 – 2010-12-17 14:44:57

回答

11

是的,你需要添加一個終止'\ 0'(不是NULL,順便說一句)你自己 - C只對字符串文字,不適用於任何數組。

例如 -

char* str = "12345"; 

將帶有6個字節的數組,第六一個是 '\ 0'。

也是一樣的 -

char str[] = "12345"; 

這將有6個項目。

但是 -

char str[] = { '1', '2', '3', '4', '5' }; 

將會有確切的5個項目,而不會終止 '\ 0'。

(在你初始化的問題中你已經有'\ 0',所以你不需要其他任何東西)。

1

如果您想要將字符數組作爲字符串操作,那麼您需要終止字符。

0

,如果你不想把一個\0明確的字符串 假設你知道你的字符串包含5字母,然後創建一個這樣

char str[6]={'h','e','l','l','o'}; 

我點的數組是可以做到這一點,即使你半初始化一個數組,其餘的值用0s填充。 因此,例如

int arr[5]={1,2,3}; 

現在,如果你做

printf("%d",a[3]); or  printf("%d",a[4]); 

都將是0