AnsiString   这是P a s c a l缺省的字符串类型,它由AnsiChar 字符组成,其长度没有限制,同时与
n u l l结束的字符串相兼容这个(n u l l结束的字符串相兼容)是什么意思 

解决方案 »

  1.   

    比如:s:ansistring
       s:='hello';
    内存结构:
    32位引用技术器 长度=5  s[1]= h .. s[5]=0 s[6]=null
      

  2.   

    比如:a:array of char
      setlength(a,5); 
      a[0]:='h'
      ..
      a[4]:='0'   
    内存结构: 
    32位引用技术器 长度=5  a[0]= h .. a[4]=0 
      

  3.   

    32位引用技术器 和s[0]不是你用的,你也用不了,delphi自己管理用的,实际上你不用管的
      

  4.   

    主要 为了兼容c中的以null结尾字符串
      

  5.   

    多谢你的解答 我是看了网上的资料有些不懂指向字符串的指针,如果不是以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); {运行时出现错误} 这个有运行的没错呢
      

  6.   

    没有错啊!procedure TForm1.Button2Click(Sender: TObject);
    var
      s:string;
      p:pchar;
    begin
      s:='new';
      label1.caption:=s; {new}
      p:=@s[1];{不是以0结尾,莫用pchar型指针}
      label3.caption:=strpas(p); {运行时出现错误}
    end;
      

  7.   

    n u l l结束的字符串指的是以#0结束的字符串.即与C里的\0结尾.
    在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.
    而是空串的时候就会报内存错.