一个很有意思的问题,各位大侠,不吝赐教

llianjiang 2004-06-25 11:48:06
int length;
char *ch;
ch = Edit1->Text.c_str();//问题在那里?

length = Edit1->Text.Length();
for(int i =0;i<length;i++)
{
if((ch[i]>'9')||(ch[i]<'0'))
{
ShowMessage("请输入0--9的数字");
return;
}
}
当全速运行时,ch的内容与Edit1->Text不一样,如果在第四行设一断点,当运行到断点时,先看ch的内容,还是与Edit1->Text不一样,如果此时看一下Edit1->Text的内容后,再看ch的内容就与Edit1->Text一样了。
请问,这是什么问题?
我先谢谢大家了。
...全文
31 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhwh 2004-06-26
  • 打赏
  • 举报
回复
AnsiString::c_str() returns a non const temporary pointer to the internal string buffer in the AnsiString object. The pointer is invalid once the statement in which it is used has finished executing. That is,don't do something like this:

char* cp = Edit1->Text.c_str();
char* cp2 = strtok( cp, " \t\n" ); // cp may no longer be valid


If you need a persistent pointer, you MUST copy the string into its own buffer:

char* cp = new char[ Edit1->Text.Length() + 1 ];
strcpy( cp, Edit1->Text.c_str() );

AnsiString的帮助。可能是你缓存了指针,但是AnsiString内部会动态构造。
jhwh 2004-06-26
  • 打赏
  • 举报
回复
不会出现这种情况的,楼主是不是其他哪里出的错。
  • 打赏
  • 举报
回复
c_str返回的是一个临时的字串,所以你的用法很危险。

有必要拷贝char[]一定要strcpy
如果只是上面的需要就直接Edit->Text[i];//i从1开始
llianjiang 2004-06-26
  • 打赏
  • 举报
回复
非常非常非常非常非常感谢 cker(〖烟波浩淼三千里、人鬼殊途五百年〗)
和jhwh(弹剑长歌) ,我对二位的敬仰之情有如滔滔江水连绵不绝。。。
真心感谢二位大手的帮助

602

社区成员

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

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