在C中,数组初始化只有一个元素专门处理?

在阅读这个问题时,我想测试GCC中的输入,看看会输出什么错误。 令我惊讶的是以下一行:

char array[] = {"s"}; 

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

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

 char array[] = {"s"}; 

与:

 char array[] = "s"; 

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

要么,

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

在这种情况下, { }是初始化数组所必需的。

正确初始化的字符串是:

 char array[] = "something"; 

它是一个10字符arrays。

但如果你写:

 `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或更多?