一个奇怪的问题?(关于String和char*)

bangle 2004-12-23 08:31:13
我在一个Form里加入以下控件:
一个Memo
一个Button
两个Edit

我发现以下现象:
第一:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
i=0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String M_string;
char *M_char;

M_string=Memo1->Lines->Strings[i];
M_char=Memo1->Lines->Strings[i].c_str();

Edit1->Text=M_string;
Edit2->Text=M_char;

i++;
}
//---------------------------------------------------------------------------
结果:
i=0时:
Edit1->Text="abc"
Edit2->Text="abc"
i=1时:
Edit1->Text="de"
Edit2->Text="abc"
i=2时:
Edit1->Text="f"
Edit2->Text="de"



第二:
{
String M_string;
char *M_char;

M_string=Memo1->Lines->Strings[i].c_str();
M_char=Memo1->Lines->Strings[i].c_str();

Edit1->Text=M_string;
Edit2->Text=M_char;

i++;
}
结果:
i=0时:
Edit1->Text="abc"
Edit2->Text=""
i=1时:
Edit1->Text="de"
Edit2->Text=""
i=2时:
Edit1->Text="f"
Edit2->Text=""

第三:
如果单独把:M_string=Memo1->Lines->Strings[i].c_str();
或者: M_char=Memo1->Lines->Strings[i].c_str();
前面加//这样再运行,结果正常。

各位大师能给我解释一下吗?














































...全文
178 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
samchoy 2004-12-23
  • 打赏
  • 举报
回复
改成
char M_char[256];
或者用 new 给指针分配空间
再执行
strcpy(M_char,Memo1->lines->Strings[i].c_str());
bangle 2004-12-23
  • 打赏
  • 举报
回复
这句有错:
M_char=Memo1->Lines->Strings[i].c_str();

char数组,赋值不能这样,要使用strcpy:
strcpy(M_char,Memo1->lines->Strings[i].c_str());

楼主想散分的话,这点也太少了

To:cool222(希望)
这样的话运行会出错的。
有哥 2004-12-23
  • 打赏
  • 举报
回复
这句有错:
M_char=Memo1->Lines->Strings[i].c_str();

char数组,赋值不能这样,要使用strcpy:
strcpy(M_char,Memo1->lines->Strings[i].c_str());

楼主想散分的话,这点也太少了

13,871

社区成员

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

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