C阵列初始化

时间:2010-12-17 14:43:15

标签: c arrays initialization

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

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

基本上,这是初始化UTF-16字符串。在这种情况下,UChar是16位。

我的问题是:我需要字符串末尾的尾随NULL字节,但是有必要将它包含在初始化中,还是C会自动包含所有数组初始化的内容?

3 个答案:

答案 0 :(得分:11)

是的,您需要添加一个终止'\ 0'(顺便说一下,不是NULL) - C只对字符串文字执行此操作,而不是对任何数组执行。

例如 -

char* str = "12345";

将是一个包含6个字符的数组,第六个是'\ 0'。

同样适用于 -

char str[] = "12345";

它将有6个项目。

但是 -

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

将有5个项目,没有终止'\ 0'。

(在问题初始化中你已经有了'\ 0',所以你不需要其他任何东西)。

答案 1 :(得分:1)

如果您想将char数组作为字符串进行操作,那么您将需要终止字符。

答案 2 :(得分: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