关于TListView中TListItem的data属性的使用问题

wu_07 2003-02-19 09:09:54
我在每个TListItem的Data属性中存储了一个char指针,
field_id等于“02”,“00”等

TListItem *pItem1;
pItem1 = ListView1->Items->Add();
pItem1->Data = field_id.c_str();

在这里我用ShowMessage(AnsiString((char*)pItem1->Data)取出时候完全正确

但我在另外一个事件中取出
pItem=ListView1->Selected;
ShowMessage(AnsiString((char*)pItem->Data));的结果却不一样,居然是一个“步”字?

想问问大家原因:)
...全文
131 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
halibut 2003-02-19
  • 打赏
  • 举报
回复
field_id是一个字符串对象,它管理一个字符串内存,就是field_id.c_str()返回的地址对应的内存,如果给field_id赋值,由于新值的长度可能大于field_id现有的内存长度,这样就会引起field_id重新申请一块内存,这样,在先前field_id.c_str()返回的指针就无效了!
wu_07 2003-02-19
  • 打赏
  • 举报
回复
正如kingfish(八百里秦川@龙城异客)所言,确实是这个原因

谢谢!:)
kingfish 2003-02-19
  • 打赏
  • 举报
回复
field_id.c_str(); //c_str()返回一个临时指针,只在本句有效

char buf[10]; //成员变量或全局变量


strcpy( buf, field_id.c_str());
pItem1->Data = buf;
「已注销」 2003-02-19
  • 打赏
  • 举报
回复
以后你描述问题要准确

什么是“另外一个事件”

那么非“另外一个事件”又是什么

你这样很难得到答案

“步”字很显然是一个“乱码”

很可能在那个状态下data中的数据不对

@_@

602

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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