请教
问题1:
string 类型是 256 字节,是吗?
问题2:
在 delphi 中比较 string 类型还大的是什么类型?
因为Richedit 的 Lines.Strings[0] 有可能大于 256
我需要定义一个这样的变量来接受 Lines.Strings[0]。谢谢!

解决方案 »

  1.   

    Lines.Strings[0]本身就是String类型的
      

  2.   

    String types 
    Type Maximum length Memory required Used for
    ShortString 255 characters 2 to 256 bytes backward compatibility
    AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
    WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications
      

  3.   

    如果只简单地用String定义字符串,那么该字符串可能是短字符串也可能是ANSI长字符串,这取决于$H 编译指令的值,$H+(确省)代表长字符串(ANSIString 类型)。长字符串是Delphi 库中控件使用的字符串。Delphi 长字符串基于引用计数机制,通过引用计数追踪内存中引用同一字符串的字符串变量,当字符串不再使用时,也就是说引用计数为零时,释放内存。如果你要增加字符串的长度,而该字符串邻近又没有空闲的内存,即在同一存储单元字符串已没有扩展的余地,这时字符串必须被完整地拷贝到另一个存储单元。当这种情况发生时,Delphi运行时间支持程序会以完全透明的方式为字符串重新分配内存。为了有效地分配所需的存储空间,你可以用SetLength 过程设定字符串的最大长度值:SetLength (String1, 200);
    SetLength 过程只是完成一个内存请求,并没有实际分配内存。它只是把将来所需的内存预留出来,实际上并没有使用这段内存。这一技术源于Windows 操作系统,现被Delphi用来动态分配内存。例如,当你请求一个很大的数组时,系统会将数组内存预留出来,但并没有把内存分配给数组。一般不需要设置字符串的长度,不过当需要把长字符串作为参数传递给API 函数时(经过类型转换后),你必须用SetLength 为该字符串预留内存空间,这一点我会在后面进行说明。
      

  4.   

    String不能超过256个字符是16位delphi时代的事情了
      

  5.   

    或者举个例子你可以看得更清楚procedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
    begin
      s := '1234567890'; //10位
      s := s + s + s + s + s + s + s + s + s + s; //100位
      s := s + s + s + s + s + s + s + s + s + s; //1000位
      ShowMessage('现在长度为:'+IntToStr(Length(s))+#13#10+s);
    end;
      

  6.   

    岗位大哥真是太热心了,谢谢!
    特别是 cuteant 大大!