C 语言中字符数组的一个问题 财富值93

2016-10-29 14:46发布

int main() {   char s1[50], s2[50] = "hello";   s1 = s2;   printf("%s", s1); }

s1 = s2 那句报错了,问题到底出在哪?求解。

13条回答
那么火 - 这个人很懒,什么都没留下
1楼 · 2016-10-29 14:48.采纳回答

最后那个括号没对齐,对齐就好了

一句话: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不是左值不能被赋值

一周热门 更多>