c语言中的复制和赋值问题

itelly 2011-10-15 06:26:28
对于两个字符数组,不能用if(s1==s2)来比较,而只能用strcmp(s1,s2)来比较,
不能用s1=s2来赋值,只能用strcpy(s1,s2)来赋值,

这是为什么呢??

在c++中能这两个都能行吗?
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
itelly 2011-10-15
  • 打赏
  • 举报
回复
今天晚自习坐在教室,突然就明白了
hongwenjun 2011-10-15
  • 打赏
  • 举报
回复
楼主还是看书吧,这个问题越解释越糊涂。

C/C++ 字符串没有真的赋值
string 的 = 本质是个函数

string::operator=
public member function
string& operator= ( const string& str );
string& operator= ( const char* s );
string& operator= ( char c );
iaccepted 2011-10-15
  • 打赏
  • 举报
回复
字符数组名S1、S2代表的是他们数组的起始地址,所以,当你用S1==S2来比较时,实际比较的是他们的起始地址而不是数组内容。
if(s1==s2)这样不会报错,只是比的是他们的起始地址
lovestefanie 2011-10-15
  • 打赏
  • 举报
回复
c++中也只是string可以,char还是不行的
char是基本类型,而string是系统后来定义实现了类,重载了+号和=号
haofang666777 2011-10-15
  • 打赏
  • 举报
回复
s1=s2页只是指针的赋值
只是把s1指向了s2所指的内容,s1原来所指内容都没有变
xinhua0910 2011-10-15
  • 打赏
  • 举报
回复
看下书先,
字符数组名S1、S2代表的是他们数组的起始地址,所以,当你用S1==S2来比较时,实际比较的是他们的起始地址而不是数组内容。

if(s1==s2)这样不会报错,只是比的是他们的起始地址
if(0 == strcmp(s1,s2)) 这样才是比较数组内容
C、C++中都一样
fox000002 2011-10-15
  • 打赏
  • 举报
回复
C++ 在这点是和 C 一样的

因为是龟腚,不支持这么操作

mengmingtao 2011-10-15
  • 打赏
  • 举报
回复
不行。除非你把它包装成类~。C++的string类可以

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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