StringList不是很好用吗?为什么不用。
如果一定要,那从TList派生一下吧。
如果一定要,那从TList派生一下吧。
解决方案 »
- autoUpgrade控件的使用
- ****已知Memo中的确定行,在Edit1中显示这一行中的确定列的字符值****
- 关于DBGrid的一个小问题。急呀!!!
- 关于outlook express访问服务器的原理
- 简单问题,我想得到一个字符串中第一个“|”前的所有字符,什么函数可以得到?
- ADOQuery 中如何使用 select count?
- 求助:在WEB方式下,如何实现在网页上浏览数据库中的图。
- 关于DComConnection的连接问题
- 江门市或深圳的DELPHI高手可以留下QQ吗?
- 有谁能给我发一个ADO26的升级补丁,是可以解决空记录问题的,我的邮箱是[email protected]
- 如何封装Delphi编的数据库程序
- SOS!!!!! 若完满解决,高分相送! 怎样解决delphi程序运行后彻底从内存中free....
你上面的代码,pascal语法检查同不过的,
你这样的做法不用担心,list释放时就释放存入的指针值,指针指向的对象她不负责,你要自己负责。但string是自管理的,这里不用担心。
List.Add(Pchar(s))j;//add pointer类型。
测试代码:
var
s:string;
List: TList;
begin
s:='abc';
List := TList.Create;
list.add(Pchar(s));
showmessage(string(list.items[0]));
List.Free;
showmessage(s);
end;TList大都用来做管理对象链表什么的,你管理string,不如用Tstringlist;
to laza :你说得对。但问题是List如果是全局变量,我在别的过程中用showmessage(string(list.items[0]));也可以显示正常,这时这块内存是不是已经被系统释放了?再对这个地址操作岂不是很危险?我想动态建立一个string->将地址写入Tlist->在程序完后释放。
难道只能单独针对String类型再加上一个TStringList吗?
var
Form1: TForm1;
U_Str1, U_str3: string;implementation
....//测试代码:
U_str1 := 'Form1Unit_String';
U_Str3 := 'Form1Unit_String'; list.add(Pchar(U_str1));
list.add(Pchar(U_str3)); showmessage(string(list.items[0]));
showmessage(string(list.items[1]));
List.Free;
showmessage(U_Str1);
showmessage(U_Str3);
....
var s:string;
begin
s:='abc';
list.add(s);
end;
在其它过程中:
var v:string;
begin
v:=copy(list.ad(s),x,y);//其中,x是字符窜的起始位置,y是结束位置(可以量长度取得字符串全长,如Length(list.item[0]))。copy函数在内存中新辟了一块空间,不会和其它内容冲突。
List.Free;//最后释放list此外,你可以看一下copy function的说明及其例子
v:=copy(list.item[0],x,y);
我想到一个方法:设全局变量:var p:Pchar;
procedure X;
...
getMem(p,length(s));
p:=s;
...procedure Y;
...
freemem(p);
...
各位高手,行不行?
具体可看《深入Delphi编程》一书
而这些Delphi都已经做好了,干吗不用?
其它的用来储存字符串的内存都是动态管理的,这里,我想是你想得太多了
它其实可以当成一个数组来使用,不过下标从1开始索引,索引0为其引用计数,当等于0时系统会自动释放此String对象。索引-1为其长度。