• 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发

一个奇怪的问题?(关于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();
前面加//这样再运行,结果正常。

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














































...全文
127 点赞 收藏 3
写回复
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());

楼主想散分的话,这点也太少了
回复 点赞
发动态
发帖子
C++ Builder
创建于2007-08-02

2563

社区成员

10.2w+

社区内容

C++ Builder相关内容讨论区
社区公告
暂无公告