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

AnsiString 2 Char,How to?

rustle 2002-05-31 03:03:10
As Title
...全文
5 点赞 收藏 7
写回复
7 条回复
tiger_qi 2002年05月31日
AnsiSting b = "aaa";
char * c = b.c_str();

b="bbb";

然后ShowMessage(c);肯会有什么结果??
当给b重新值的时候以前的内存释放,所以c也就没有内容了

比较好的办法就是如下:
AnsiSting b = "aaa";
int len = b.Length();
char * c =new char [len + 1 ]
b="bbb";

ShowMessage(c);

使用完c后,释放c

delete [] c;




回复 点赞
xdspower 2002年05月31日
COKING(疯间猖越) 的方法可以,不过有一个错误,最后一个应该是
dlelete[] buf;
回复 点赞
LuoGD 2002年05月31日
char cBuff[1024];
AnsiString asStr;

...

strcpy(cBuff, asString.data());

回复 点赞
COKING 2002年05月31日
char *buf;
buf= new char[str.Length()+1];
strcpy(buf,str.c_str());
..........
..........
..........
delete buf;
回复 点赞
mygodness 2002年05月31日
以上代码安全性不高,特别是用于:edit1->text.c_str();之类的,原因如下(我自己总结的):
4、AnsiString类和C语言下的字符串可以相互转换,C语言下的字符串可以用AnsiString类构造函数来转换,而AnsiString类的变量转为C语言下的字符串可以用AnsiString类的一个方法:c_str();如:
char *mystr;
AnsiString s="i like bcb";//这样将字符串赋值给AnsiString类变量,写法不太正规,但大部分时候可以通过编译
mystr=new char[s.Length()+1];
strcpy(mystr,s.c_str());//这句的真正意思是进行拷贝,有的人爱写成mystr=s.c_str;这样往往行不通,因为你这样没有拷贝,只是将字
符指针指向了c_str()返回的一片区域,而根据AnsiString类的说明,这片区域是临时性的,等到你想用mystr是它所指向的这片临时区域内容可能已不是原来的内容了。但是暂时使用它是可以的,如把它用于需要字符串指针作参数的地方。
delete mystr;
回复 点赞
bitfan 2002年05月31日
AnsiString str="Example";
char * pCh;
pCh=str.c_str();
回复 点赞
bluebird97073 2002年05月31日
.
回复 点赞
发动态
发帖子
C++ Builder
创建于2007-08-02

2563

社区成员

10.2w+

社区内容

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