请教:在 delphi 中比较 string 类型还大的是什么类型?

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

谢谢!
...全文
148 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DELPHIYMQ 2006-03-31
  • 打赏
  • 举报
回复
岗位大哥真是太热心了,谢谢!
特别是 cuteant 大大!
cuteant 2006-03-31
  • 打赏
  • 举报
回复
或者举个例子你可以看得更清楚

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;
cuteant 2006-03-31
  • 打赏
  • 举报
回复
String不能超过256个字符是16位delphi时代的事情了
cuteant 2006-03-31
  • 打赏
  • 举报
回复
如果只简单地用String定义字符串,那么该字符串可能是短字符串也可能是ANSI长字符串,这取决于$H 编译指令的值,$H+(确省)代表长字符串(ANSIString 类型)。长字符串是Delphi 库中控件使用的字符串。

Delphi 长字符串基于引用计数机制,通过引用计数追踪内存中引用同一字符串的字符串变量,当字符串不再使用时,也就是说引用计数为零时,释放内存。

如果你要增加字符串的长度,而该字符串邻近又没有空闲的内存,即在同一存储单元字符串已没有扩展的余地,这时字符串必须被完整地拷贝到另一个存储单元。当这种情况发生时,Delphi运行时间支持程序会以完全透明的方式为字符串重新分配内存。为了有效地分配所需的存储空间,你可以用SetLength 过程设定字符串的最大长度值:

SetLength (String1, 200);
SetLength 过程只是完成一个内存请求,并没有实际分配内存。它只是把将来所需的内存预留出来,实际上并没有使用这段内存。这一技术源于Windows 操作系统,现被Delphi用来动态分配内存。例如,当你请求一个很大的数组时,系统会将数组内存预留出来,但并没有把内存分配给数组。

一般不需要设置字符串的长度,不过当需要把长字符串作为参数传递给API 函数时(经过类型转换后),你必须用SetLength 为该字符串预留内存空间,这一点我会在后面进行说明。
47522341 2006-03-31
  • 打赏
  • 举报
回复
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
cuteant 2006-03-31
  • 打赏
  • 举报
回复
Lines.Strings[0]本身就是String类型的
kenzo981 2006-03-31
  • 打赏
  • 举报
回复
TStringList

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧