richedit->text->c_str()问题?

early_bird 2002-06-19 06:46:34
本人初学bcb,用richedit控件
用一个char *p=richedit->text->c_str();

结果发现当内容很少时候返回的字符串p内容不正确.但是字符串长度超过5个一般就正确

无奈使用

char *p=new char[richedit->Length()];
for (int i=0;i<richedit->Length();i++)
{
p[i]=richedit->text[i+1];
}

这样得到的p就是正确的字符串,

为什么?
...全文
39 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
书生 2002-06-19
  • 打赏
  • 举报
回复
Mark@_@

学习
iYoung 2002-06-19
  • 打赏
  • 举报
回复
老问题了。
不要保存 c_st() 得到的指针。如果这个 AnsiString 的内容改变,那么
保存的指针就失效了。
用 strcpy 自己保存一份才踏实。
early_bird 2002-06-19
  • 打赏
  • 举报
回复
回cclis

这样得到的是临时空间么?
我认为这样得到的是指向一个字符串的指针,
就是说char *p=??.c_str()以后
p是指向原来的内存中的那个字符串阿...
strcpy用不用都是一样阿.用了就是拷贝一份,
不用就是指向原来内存中的.

这个解释对不?
early_bird 2002-06-19
  • 打赏
  • 举报
回复
晕~
其实我是这样调用的哎..
char *p=richedit->Text.c_str();//不准确
可是还是只有用
char *p=new char[richedit->Length()];
for (int i=0;i<richedit->Length();i++)
{
p[i]=richedit->text[i+1];
}
程序才是正常的

我是问c_str()函数的问题了
CCLIS 2002-06-19
  • 打赏
  • 举报
回复
char *p = ??.c_str()不会自动分配内存空间,这样得到的只是一个临时的空间,如果继续操作,很有可能造成系统崩溃,后面的改进是对的,也可以用如下办法:

char *p=new char[richedit->Length()+1]; //注意要放一个终止字符的空间。
strcpy(p,richedit->text.c_str();

这样应该不会出现错误。
seabright2002 2002-06-19
  • 打赏
  • 举报
回复
char *p=richedit->Text.c_str();

13,826

社区成员

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

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