在阅读this question时,我想测试GCC中的输入以查看输出的错误。令我惊讶的是以下一行:
char array[] = {"s"};
编译时没有错误或警告,导致包含"s\0"
的大小为2的数组。我原本期望编译器错误,因为表达式的右侧是char*[]
类型。
数组初始化只有一个元素在这种情况下不被视为数组,为什么?
答案 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或更多?