首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >delphi 'string‘字面值怎么会超过255?

delphi 'string‘字面值怎么会超过255?
EN

Stack Overflow用户
提问于 2012-01-07 06:33:00
回答 6查看 43.9K关注 0票数 30

我在delphi 7上工作,我正在处理一个字符串,我偶然发现

对于默认长度的字符串,即简单声明为string,最大值总是255。ShortString从不允许增长到超过255个字符。

delphi字符串

有一次,我不得不在我的delphi代码中做这样的事情(这是为了一个非常大的查询)

代码语言:javascript
运行
复制
  var
    sMyStringOF256characters : string;
    ilength : integer;
    begin
       sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
       //length of sMyStringOF256characters is 256
    end;

我得到了这个错误

错误u_home.pas(38):字符串文字最多可能有255个元素。

但当我尝试这个

代码语言:javascript
运行
复制
    var
      iCounter              : integer;
      myExtremlyLongString  : string;
   begin
      myExtremlyLongString:='';
      Label1.Caption:='';
      for iCounter:=0 to 2500 do
         begin
            myExtremlyLongString:=myExtremlyLongString+inttostr(iCounter);
            Label1.Caption:=myExtremlyLongString;
         end;
         Label2.Caption:=inttostr(length(myExtremlyLongString));
   end; 

结果是

如您所见,myExtremlyLongString的长度是8894字符。

为什么德尔福没有给出任何错误,称myExtremlyLongString?的长度超过255

我使用的编辑

代码语言:javascript
运行
复制
SetLength(sMyStringOF256characters,300);

但它不起作用。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-07 07:14:00

为什么德尔福没有给出任何错误的说法,长度超过255个对myExtremlyLongString?

您的答案在长字符串(AnsiString)部分的文本中有一点低一些。

在Delphi的当前版本中,字符串类型只是AnsiString的别名,

因此,字符串不仅限于255个字符,还包括字符串文本。这意味着您可以生成大于255个字符的字符串,但代码中的字符串值不能大于255个字符。如果你想要的话你就得把他们分开。

代码语言:javascript
运行
复制
sMyString:='ThisStringisofLength255'+'ThisStringisofLength255';
票数 44
EN

Stack Overflow用户

发布于 2012-01-07 07:14:59

分成:

代码语言:javascript
运行
复制
sMyStringOF256characters := 
  'ThisStringis' +
  'ofLength256' +
  'And ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'ManyManyManyManyManyManyManyManyManyManyManyManyMany' + 
  'CharactersCharactersCharactersCharactersCharactersCharactersCharactersCharacters';
票数 11
EN

Stack Overflow用户

发布于 2012-01-07 07:18:01

在过去的DOS/Turbo时代,“字符串”实际上仅限于255个字符。在很大程度上是因为第一个字节包含字符串长度,而一个字节只能有一个0到255之间的值。

在Delphi的当代版本中,这不再是一个问题。

"ShortString“是旧DOS/Pascal字符串类型的类型。

"LongString“是默认的字符串类型已经有很长时间了(包括BorlandDelphi2006,我目前在大多数生产工作中使用)。LongStrings (又名"AnsiStrings")包含8位字符,并且仅受可用内存的限制。

Delphi的最新版本(Delphi 2009及更高版本,包括新的Delphi XE2)现在都默认为多字节Unicode "WideString“字符串。WideStrings和AnsiStrings一样,在最大长度上也实际上是“无限”的。

本文将更详细地解释:

http://delphi.about.com/od/beginners/l/aa071800a.htm

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8767899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档