为什么给字符串赋值要用strcpy?

人海迷航 2008-09-26 11:27:29
为什么不这样:
char s2[10];
s2 = "China";

而要这样:
char s2[10];
strcpy(s2,"China");

char数组不能在定义之后直接赋值?
...全文
1953 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
使用时,定义 char string[12]="hello",这样也是很方便的
lsmdiao0812 2008-09-26
  • 打赏
  • 举报
回复
建议用string
aozhi 2008-09-26
  • 打赏
  • 举报
回复 3
char s2[10]; //从栈中开辟空间把首地址给s2,以后s2中保存的地址不能再变。
"China"的首地址在常量区,显然和s2不一样。硬把它赋过去肯定是不行的。
而用strcpy函数并不会改变s2中保存的地址,只改变数组里的内容。所以没问题。
lann64 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 asiabaa 的帖子:]
为什么不这样:
char s2[10];
s2 = "China";

而要这样:
char s2[10];
strcpy(s2,"China");

char数组不能在定义之后直接赋值?
[/Quote]
严格说s2是个常指针,在这里是&s[0],也就是说是你定义的数组首个元素的地址。
按照c的语法s2=...是对变量s2赋值,也就是你想让s2不指向这个地址了,这是常指针不允许的。从意思上也不对。
帅得不敢出门 2008-09-26
  • 打赏
  • 举报
回复
s2 是首地址 ,是一个常量
修改首地址是不行的.
lbh2001 2008-09-26
  • 打赏
  • 举报
回复 1
char s2[10]; ------>在C语言中这样定义之后s2就成为指向数组首元素的常量指针
s2 = "China";------>对常量赋值当然不可以
CODE163 2008-09-26
  • 打赏
  • 举报
回复
#include "stdio.h"

void main()
{
const char * s="china";
printf("%s",s);
}
bitxinhai 2008-09-26
  • 打赏
  • 举报
回复 1
要么用strcpy,要么用循环一个一个的赋值!!!
很明显strcpy简单!!!
xianyuxiaoqiang 2008-09-26
  • 打赏
  • 举报
回复
因为编译器不是万能的。
cectsky 2008-09-26
  • 打赏
  • 举报
回复
建议s2定义成string的

string s2;
s2="hello world!";
pangshaohua 2008-09-26
  • 打赏
  • 举报
回复
你可以通过char s2[10] = "China"; 来直接赋值
因为2个数组间不能直接赋值,所以char s2[10];
s2 = "China"; 不能这样,要用这种方式就要用遍历for()来赋值
chenqiang35 2008-09-26
  • 打赏
  • 举报
回复 1
因为‘=’没有赋值字符串的功能
Chillbon 2008-09-26
  • 打赏
  • 举报
回复
你还没有搞清楚 初始化与赋值的区别
人海迷航 2008-09-26
  • 打赏
  • 举报
回复
感谢回帖的所有人。一楼一楼看下来,终于明白了。由于我觉得8楼是第一个给出较为精确的答案,所以分数给了8楼。当然啦,9楼10楼和上面、下面很多位,说的都很对,感谢。
嗷嗷叫的老马 2008-09-26
  • 打赏
  • 举报
回复
............
user_csc 2008-09-26
  • 打赏
  • 举报
回复

char *s2;
s2= (char *)malloc(sizeof(char)* 10);
s2= "aaa";
superstar_pig 2008-09-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lbh2001 的回复:]
char s2[10]; ------>在C语言中这样定义之后s2就成为指向数组首元素的常量指针
s2 = "China";------>对常量赋值当然不可以
[/Quote]

给S2赋值应该是可以的。但是S2是一个字符。"china"是一个字符串。所以不能
BluntBlade 2008-09-26
  • 打赏
  • 举报
回复
C语言没有字符串变量这种东西。
star408918331 2008-09-26
  • 打赏
  • 举报
回复
你可以这样写:char s2[10]="china";
star408918331 2008-09-26
  • 打赏
  • 举报
回复
好好看一下c字符串吧!你声明的是一个cstring变量,它与普通字符串数组的不同,也就是上面说的,初始化和赋值在这里是不同的!
加载更多回复(3)

70,005

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧