CBC中对ANSISTRING进行多次相加处理后,会出现奇怪字串,为什么?

jerrybk 2001-02-26 01:29:00
比如:
void __fastcall TfrmMain::DBGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Memo1->Lines[0].Text=
DBGrid1->DataSource->DataSet->Fields->Fields[2]->AsString;
sToUser=DBGrid1->DataSource->DataSet->Fields->Fields[5]->AsString;
s1=DBGrid1->DataSource->DataSet->Fields->Fields[3]->AsString;
s2=DBGrid1->DataSource->DataSet->Fields->Fields[9]->AsString;
txtTS->Caption =s;
}
此函数调用几次后,s就得到了莫名其妙的字符!我百思不得其解!奉送20分!
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2001-02-27
  • 打赏
  • 举报
回复
该段代码我又试练了1000次不管用全局变量还是局部变量都没发现问题,因此可能是你系统有问题,请重装bcb,如不能解决,则只好重装windows和bcb。
BCB 2001-02-27
  • 打赏
  • 举报
回复
串AnsiString从未遇到任何问题,可能是你自已有疏忽
试验时:
1。去掉无关的代码,否则看不清;
2。将s1,s2设成局部变量;

holyfire 2001-02-27
  • 打赏
  • 举报
回复
显示的奇怪字符是什么,我在2K下BCB经常把\n或者NULL显示成一方块。
jerrybk 2001-02-27
  • 打赏
  • 举报
回复
我再补充一下:这段代码作用是每次单击DBGRID1中的一行,在一LABEL:txtTS的CAPTION上显示该行的信息,至于Fields[n]是绝对没有错的。我的运行平台是CB5+Win2000,难道真与平台有关?
我不懂电脑 2001-02-26
  • 打赏
  • 举报
回复
该段代码我试练了1000次没发现问题,因此可能是你系统有问题,请重装bcb,如不能解决,则只好重装windows和bcb。
Winsky 2001-02-26
  • 打赏
  • 举报
回复
应该不是String的问题,请仔细检查一下你的数据操作部分是否有其他代码影响到结果,比如Fields[9]是否合法,就是说DataSet中如果只有8个字段则会越界,再就是数据集的活动状态等.反正这段程序看不出什么问题,再好好跟踪一下吧.顺便问一句txtTS是个什么东西,是否已经分配内存了?改为下面样子试试,不行再说.
void __fastcall TfrmMain::DBGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Memo1->Lines[0].Text=
DBGrid1->DataSource->DataSet->Fields->Fields[2]->AsString;
sToUser=DBGrid1->DataSource->DataSet->Fields->Fields[5]->AsString;
s1=DBGrid1->DataSource->DataSet->Fields->Fields[3]->AsString;
s2=DBGrid1->DataSource->DataSet->Fields->Fields[9]->AsString;
s=s1+s2;
Caption =s; //把txtTS去掉,字符直接显示到窗体的标题栏
}


LiangShengHong 2001-02-26
  • 打赏
  • 举报
回复
从你的代码看没有任何问题,关键是S1、S2的问题
void __fastcall TfrmMain::DBGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Memo1->Lines[0].Text=
DBGrid1->DataSource->DataSet->Fields->Fields[2]->AsString;
sToUser=DBGrid1->DataSource->DataSet->Fields->Fields[5]->AsString;
//增加下列代码试试
s1="";
s2="";
s1=DBGrid1->DataSource->DataSet->Fields->Fields[3]->AsString;
s2=DBGrid1->DataSource->DataSet->Fields->Fields[9]->AsString;
s=s1+s2;
txtTS->Caption =s;
}
yao_yuan 2001-02-26
  • 打赏
  • 举报
回复
单步跟踪吧,看s1,s2到底出什么问题,是内存溢出还是有什么空指针之类的错误
holyfire 2001-02-26
  • 打赏
  • 举报
回复
就这段代码看不出什么问题来。
jerrybk 2001-02-26
  • 打赏
  • 举报
回复
对不起,有些不完全,正确如下:
void __fastcall TfrmMain::DBGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Memo1->Lines[0].Text=
DBGrid1->DataSource->DataSet->Fields->Fields[2]->AsString;
sToUser=DBGrid1->DataSource->DataSet->Fields->Fields[5]->AsString;
s1=DBGrid1->DataSource->DataSet->Fields->Fields[3]->AsString;
s2=DBGrid1->DataSource->DataSet->Fields->Fields[9]->AsString;
s=s1+s2;
txtTS->Caption =s;
}
此函数调用几次后,s就得到了莫名其妙的字符!我百思不得其解!奉送20分!

13,825

社区成员

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

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