C数组初始化

问题描述:

我很好奇C如何处理数组初始化。我在我的程序中有以下代码:C数组初始化

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

基本上,这是初始化一个UTF-16字符串。在这种情况下,UChar是16位。我的问题是:我需要在字符串末尾的尾部NULL字节,但它是必要包括它在初始化或将C自动包括所有数组初始化?

+0

取决于数组是否固定。 – 2010-12-17 14:44:57

是的,你需要添加一个终止'\ 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