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