小题大作

capfdipoe 2001-07-14 09:29:59
为什么不能用一个string对一个string 赋值,反而必须用一个char *对一个string 赋值,比如
AnsiString S;
StrCat(S.c_str(),Edit1->Text.c_str());
StrCat(S.c_str(),Edit2->Text.c_str());
Edit3->Text=S;
这样的话,edit3上就不会显示任何东西,如果将第四行改为
Edit3->Text=S.c_str();
的话,就能正确显示 ,
请问这是为什么???
万分盼望你的答复!!!
...全文
95 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2001-07-15
  • 打赏
  • 举报
回复
我也用XioGua(甲咸瓜啊) 
猛禽 2001-07-15
  • 打赏
  • 举报
回复
错误如下:
AnsiString S; // S 为空
StrCat(S.c_str(),Edit1->Text.c_str()); // c_str()返回的char*存放在临时分配的空间中,不在S中,所以此时S仍为空
StrCat(S.c_str(),Edit2->Text.c_str()); // 原因同上
Edit3->Text=S; // 因为此时S为空,所以Edit3->Text显示空
Edit3->Text=S.c_str(); // 因为此返回指针指向那个临时空间,所以可以取得内容,但些法不可靠,因为这是临时空间,不能保证它不被改变
建议在这种情况下用XioGua(甲咸瓜啊)兄的方法
XioGua 2001-07-15
  • 打赏
  • 举报
回复
我也不明白,

不过我一般这么写

AnsiString S;
S=Edit1->Text;
S+=Edit2->Text;
Edit3->Text=S;

0_0
「已注销」 2001-07-15
  • 打赏
  • 举报
回复
听课

@_@
wjzhuang 2001-07-15
  • 打赏
  • 举报
回复
为何那么麻烦
= 和 + 不就可以解决吗?
Wingsun 2001-07-15
  • 打赏
  • 举报
回复
对阿,c_str()生成的是临时空间啊,做好不要保存和修改这个内存空间。
他们说的都很对。
whitelion 2001-07-14
  • 打赏
  • 举报
回复
不敢说,学习

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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