comment peut-delphi 'string' littéraux être plus de 255?

im travaillant sur delphi 7 et je travaillais sur une des chaînes, je suis tombé sur ce

Pour une chaîne de longueur par défaut, qui est, a déclaré simplement comme une chaîne de caractères, la taille maximum est toujours 255. Un ShortString n'est jamais permis d'atteindre plus de 255 caractères.

sur delphi chaînes

une fois que j'avais à faire quelque chose comme ceci dans mon code delphi (qui a été, pour une très grande requête)

  var
    sMyStringOF256characters : string;
    ilength : integer;
    begin
       sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
       //length of sMyStringOF256characters is 256
    end;

- je obtenir ce erreur

[Erreur] u_home.pas(38): les littéraux de Chaîne peut avoir au plus 255 éléments.

mais quand j'ai essayer cette

    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; 

et le résultat est

comment peut-delphi 'string' littéraux être plus de 255?

Comme vous pouvez le voir sur la longueur de myExtremlyLongString est 8894 caractères.

pourquoi ne pas delphi donner aucune erreur en disant que la longueur est au-delà de 255 pour myExtremlyLongString?

MODIFIER
j'ai utilisé

SetLength(sMyStringOF256characters,300);

mais il ne marche pas.

  • Peut-être vous êtes juste en train de lire mal de docs. BTW, c'est vraiment pas clair qu'entendez-vous par "attribuée de façon dynamique", par opposition à ... quoi?
  • sens au cours de l'exécution au cours d'une boucle peut être strVal:=mystring, comme une boucle de la valeur de votre affectation à la variable de chaîne
  • ah, scratch "dynamique", puis, son sujet de cession vs déclaration. Ce que vous citez ci-dessus est sur les déclarations, plus précisément, à propos de limitation de compilateur sur le caractère littéraux. Il a été connecté à Turbo Pascal chaînes historiques signifie seulement.
  • Je suppose qu'ils ne retirez pas cette limitation seulement parce qu'il n'y a aucune raison pratique pour avoir de la chaîne littérale est plus que de 70 caractères... Interne (pour le compilateur) tels littérale est équivalent à array [0..N] of Char. Espérons que c'est plus clair maintenant.
  • oui, c'est maintenant
InformationsquelleAutor PresleyDias | 2012-01-07