AnsiString 这是P a s c a l缺省的字符串类型,它由AnsiChar 字符组成,其长度没有限制,同时与
n u l l结束的字符串相兼容这个(n u l l结束的字符串相兼容)是什么意思
解决方案 »
- DBGrid中的数据如何进行格式化
- 这里有北京思维加速公司的朋友吗?
- 100分--求毕业设计创意(使用Delphi的朋友帮忙看看,跟贴有分)
- 如何动态生成access数据库,最好有源码
- 调用另一个单元的自定义过程?
- 如何固定光标在表中的某一行?
- adoquery 的 update 问题
- 准备用D6自带的INDY构件写一个类似联众或边锋的网络游戏大厅!!提供点建议吧!!
- dephi 定义问题
- 关于控件的 .Controls[X]属性?
- 用quickReport制作的报表,只能预览,在预览中点打印,但是打印机没反映是怎么回事,谢谢!
- 急询在GRID上画线,在线等!!!!!!!!!!!!!!!!!!!!
s:='hello';
内存结构:
32位引用技术器 长度=5 s[1]= h .. s[5]=0 s[6]=null
setlength(a,5);
a[0]:='h'
..
a[4]:='0'
内存结构:
32位引用技术器 长度=5 a[0]= h .. a[4]=0
{s[0]=3 s[1]='n' s[2]='e' s[3]='w'}
var
s:string;
p:pchar;
begin
s:='new';
label1.caption:=s; {new}
p:=@s[1];{不是以0结尾,莫用pchar型指针}
label3.caption:=strpas(p); {运行时出现错误}
end;估计这个是很久的教程吧 // label3.caption:=strpas(p); {运行时出现错误} 这个有运行的没错呢
var
s:string;
p:pchar;
begin
s:='new';
label1.caption:=s; {new}
p:=@s[1];{不是以0结尾,莫用pchar型指针}
label3.caption:=strpas(p); {运行时出现错误}
end;
在delphi的AnsiString帮助说明里可以看到.
string为是一个4个字节的指针,当是个空串的时候它将会是nil.
在它前面有8个字节分别用来存放长度和引用计数.
字符串的内存是在堆里分配的,但你不用添加代码来管理,delphi会自动管理.
当给String重新赋值的时候,它将会重新指向新的内存,而且将原来的引用计数-1,当引用计数为0的时候就释放它.procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
s:='asdasd';
ShowMessage(IntToStr(Ord(s[Length(s)+1])));
if Assigned(@s[1]) then
ShowMessage('Y')
else
ShowMessage('N');
end;你可以看到当s不是空串的时候,第一个showmessage始终是0.
而是空串的时候就会报内存错.