2016-10-29 14:46发布
int main() { char s1[50], s2[50] = "hello"; s1 = s2; printf("%s", s1); }
s1 = s2 那句报错了,问题到底出在哪?求解。
s1 = s2
最后那个括号没对齐,对齐就好了
一句话:C和C++数组是不可拷贝的 是二等公民可以使用std::array
c语言字符串不能直接用=
=
楼主,字符数组(不是new的)变量可以看成是一个指针常量,而不是常量指针(这两者有点拗口)。可以改为 char *s1 = s2;
程序在编译好之后,s1,s2的内部就分配好了,可以看成指向分配内存的首地址。如果s1=s2不报错,就相当于s1和s2都指向s2指向的内存,同时s1指向的内存就无法访问了。
数组在 C 当中不是一等公民,换句话说,对一个数组赋值是不被允许的。
s1和s2是常量,不是变量,就像你不能给2赋值一样(比如2=3),也不能s1=s2这样给s1赋值。可以用for循环或者strcpy,strncpy去做。
GCC会提示下面错误: error: incompatible types when assigning to type char[50] from type char *
字符数组S1 S2的本身是地址,它是常量。把S1=S2就是把一个常量赋值给另一个常量当然是错误的。字符串的赋值可以用String里相应的函数
就是类型不匹配喽,s1是数组名,不是变量,数组的元素,带[x]的才是变量。
s1不是左值不能被赋值
最多设置5个标签!
付费偷看金额在0.1-10元之间
最后那个括号没对齐,对齐就好了
一句话:C和C++数组是不可拷贝的 是二等公民
可以使用std::array
c语言字符串不能直接用
=
楼主,字符数组(不是new的)变量可以看成是一个指针常量,而不是常量指针(这两者有点拗口)。
可以改为 char *s1 = s2;
程序在编译好之后,s1,s2的内部就分配好了,可以看成指向分配内存的首地址。如果s1=s2不报错,就相当于s1和s2都指向s2指向的内存,同时s1指向的内存就无法访问了。
数组在 C 当中不是一等公民,换句话说,对一个数组赋值是不被允许的。
s1和s2是常量,不是变量,就像你不能给2赋值一样(比如2=3),也不能s1=s2这样给s1赋值。
可以用for循环或者strcpy,strncpy去做。
GCC会提示下面错误:
error: incompatible types when assigning to type char[50] from type char *
字符数组S1 S2的本身是地址,它是常量。把S1=S2就是把一个常量赋值给另一个常量当然是错误的。
字符串的赋值可以用String里相应的函数
就是类型不匹配喽,s1是数组名,不是变量,数组的元素,带[x]的才是变量。
s1不是左值不能被赋值
一周热门 更多>