im pracy na Delphi 7 a ja pracuje nad strunami, natknąłem się na tenw jaki sposób delphi "ciąg" literałów może mieć więcej niż 255?
Przez ciąg domyślnej długości, czyli po prostu uznane jako ciąg znaków, max rozmiar jest zawsze 255. ShortString nigdy nie może wzrosnąć do więcej niż 255 znaków.
raz musiałem zrobić coś takiego w moim delphi kodu (który był na naprawdę dużym zapytania)
var
sMyStringOF256characters : string;
ilength : integer;
begin
sMyStringOF256characters:='ThisStringisofLength256,ThisStringisofLength256,.....'
//length of sMyStringOF256characters is 256
end;
uzyskać to error
[Błąd] u_home.pas (38): Literały łańcuchowe mogą zawierać maksymalnie 255 elementów.
ale gdy próbuję to
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;
a wynik jest
Jak widać długość myExtremlyLongString jest znaków.
dlaczego delphi nie dało żadnego błędu mówiąc, że długość przekracza 255 dla myExtremlyLongString?
EDIT użyłem
SetLength(sMyStringOF256characters,300);
ale nie robi praca.
Może jesteś po prostu czytanie źle docs. BTW, to naprawdę niejasne, co masz na myśli przez "dynamicznie przypisany", a nie ... co? – OnTheFly
@ user539484: znaczenie podczas pracy podczas pętli może być strVal: = mystring, podobnie jak wartość pętli przypisanie zmiennej łańcuchowej – PresleyDias
ah, scratch "dynamicznie", a następnie jej przydział w porównaniu z deklaracją ** **. To, co cytujesz powyżej, dotyczy deklaracji, a dokładniej - ograniczenia kompilatora znaków ** literałów **. Został on podłączony do ciągów Turbo Pascal tylko środkami historycznymi. – OnTheFly