int main()
{
char s1[50], s2[50] = "hello";
s1 = s2;
printf("%s", s1);
}
s1 = s2
那句报错了,问题到底出在哪?求解。
int main()
{
char s1[50], s2[50] = "hello";
s1 = s2;
printf("%s", s1);
}
s1 = s2
那句报错了,问题到底出在哪?求解。
GCC会提示下面错误:
error: incompatible types when assigning to type 'char[50]' from type 'char *'
就是类型不匹配喽,s1是数组名,不是变量,数组的元素,带[x]的才是变量。
数组在 C 当中不是一等公民,换句话说,对一个数组赋值是不被允许的。
数组名实际上是指向数组头部的指针常量,也就是说,以下写法是可以通过编译并正确执行的。
char s2[] = "hello";
char* s1 = s2;
printf("%s\n", s1);
C语言中数组的名称被当作常量地址。不能修改。
特别说明一下:
char s1[50], s2[50] = "hello";
这个语句,S1只声明,但是没有初始化,内存上可能都是无效值。s2有初始化为hello字符串。
字符数组S1 S2的本身是地址,它是常量。把S1=S2就是把一个常量赋值给另一个常量当然是错误的。
字符串的赋值可以用String里相应的函数