我很好奇C如何處理數組初始化。我在我的程序中有以下代碼:C數組初始化
UChar match[] = {0xdf, 'a', 'b', '\0'};
基本上,這是初始化一個UTF-16字符串。在這種情況下,UChar是16位。我的問題是:我需要在字符串末尾的尾部NULL字節,但它是必要包括它在初始化或將C自動包括所有數組初始化?
我很好奇C如何處理數組初始化。我在我的程序中有以下代碼:C數組初始化
UChar match[] = {0xdf, 'a', 'b', '\0'};
基本上,這是初始化一個UTF-16字符串。在這種情況下,UChar是16位。我的問題是:我需要在字符串末尾的尾部NULL字節,但它是必要包括它在初始化或將C自動包括所有數組初始化?
是的,你需要添加一個終止'\ 0'(不是NULL,順便說一句)你自己 - C只對字符串文字,不適用於任何數組。
例如 -
char* str = "12345";
將帶有6個字節的數組,第六一個是 '\ 0'。
也是一樣的 -
char str[] = "12345";
這將有6個項目。
但是 -
char str[] = { '1', '2', '3', '4', '5' };
將會有確切的5個項目,而不會終止 '\ 0'。
(在你初始化的問題中你已經有'\ 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
。
取決於數組是否固定。 – 2010-12-17 14:44:57