在C中,数组初始化只有一个特殊处理的元素?

时间:2011-11-09 06:48:00

标签: c arrays

在阅读this question时,我想测试GCC中的输入以查看输出的错误。令我惊讶的是以下一行:

char array[] = {"s"};

编译时没有错误或警告,导致包含"s\0"的大小为2的数组。我原本期望编译器错误,因为表达式的右侧是char*[]类型。

数组初始化只有一个元素在这种情况下不被视为数组,为什么?

2 个答案:

答案 0 :(得分:6)

char array[] = {"s"};

与:

相同
char array[] = "s";

这里{ }是可选的,因为“s”是字符串文字。

或者,

char array[] = {'s', '\0'};

在这种情况下,初始化数组需要{ }

答案 1 :(得分:-10)

正确初始化的字符串是:

char array[] = "something";

它是一个10字符阵列。

但如果你写:

`char* array = "something";`

`它是一个不同的对象,你将无法修改数组的内容。

和:

char* array[]  

不是字符串。

它是一个char指针数组(char *)。你需要为每个char *

分配内存

exp:

char* array[3];
array[0] = malloc (10*sizeof(char));
strcpy(array[0] , "hello");

但是,要拥有一个char *数组,你不能直接做:

char* array[3];
array[0] = "hello";

既不是:

char* array[] = {"first","second","other one","last"};

使用此init,无法修改字符串。

对于那些说我写的东西完全错误的人,你知道char *需要内存分配吗?

为什么-6或更多?