Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: CL | DM;

Вниз

Тип String   Найти похожие ветки 

 
Новичоккк   (2006-07-18 12:10) [0]

Всегда считал что максимальная длина строки - 255 символов, а нулевой байт хранит длину строки. Но в последнее время стал замечать, что длина может быть и больше.

procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
i:integer;
begin
str:="";
for i:=1 to 1000 do str:=str+"a";
ShowMessage(IntToStr(Length(str)));
end;

В итоге появляется сообщение "1000". Объясните пожалуйста в чем дело (Delphi 7).


 
Palladin ©   (2006-07-18 12:15) [1]

http://www.rsdn.ru/article/Delphi/dynarrays.xml


 
Elen ©   (2006-07-18 12:16) [2]

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
WideString ~2^30 characters 4 bytes to 2GB Unicode characters;
multiuser servers and multi-language applications

255 это в паскале
Если не ошибаюсь Делфи сам выбирает тип строки String или WideString Но ты этого не заметишь. Радуйся


 
Desdechado ©   (2006-07-18 12:17) [3]

Дело в "Всегда считал". Язык развивается и догмы меняются.
Смотрим справку и видим, что String может хранить до 2 Гб, если он (как по умолчанию) интерпретируется как AnsiString. Если же (для совместимости с TP) интерпретируется как ShortString, то те самые 255 байтов.
Ну, и длина хранится в служебной области памяти до начала строки (адрес с минусом от адреса начала).


 
Fay ©   (2006-07-18 12:17) [4]

Это шутка? В Delphi нет типа String (грубо говоря).
Есть ShowString, AnsiString и WideString. По умолчанию string = AnsiString, который м.б. пол-гига


 
Fay ©   (2006-07-18 12:18) [5]

Не пол-гига, а 2 гига, конечно 8)


 
Новичоккк   (2006-07-18 12:24) [6]

Спасибо за разъяснения.
Еще один вопрос. Так правильно делать?
var
str:string;
ca:array [0..$FFFF] of Char;
size:integer;
begin
...
Move(str[1],ca[0],size);
...
end;


 
Palladin ©   (2006-07-18 12:27) [7]

ты бы почитал статью то? вопроса бы не возникло...

var
str:string;
ca:array [0..$FFFF] of Char;
size:integer;
begin
...
SetLength(str,size);
Move(str[1],ca[0],size);
...
end;


 
Desdechado ©   (2006-07-18 12:29) [8]

> Так правильно делать?
А зачем?
Да и FFFF - это явно больше 2 миллиардов...


 
Desdechado ©   (2006-07-18 12:30) [9]

сорри, FFFFFFFF больше 2 млрд


 
Fay ©   (2006-07-18 13:18) [10]

2 Desdechado ©   (18.07.06 12:30) [9]

FFFFFFFF меньше нуля 8)


 
Ketmar ©   (2006-07-18 20:57) [11]

>Fay ©   (18.07.06 13:18) [10]
неа. а у вдруг меня LongWord? или вовсе Int64? %-)



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
15-1152709956
syte_ser78
2006-07-12 17:12
2006.08.06
Дело №


2-1153252646
crazy_corpse
2006-07-18 23:57
2006.08.06
Java


1-1151056210
Dok
2006-06-23 13:50
2006.08.06
Как создать комобьект типа IStream?


2-1153134874
LexXL
2006-07-17 15:14
2006.08.06
Формы


6-1139059311
Get_
2006-02-04 16:21
2006.08.06
TIdTelnetServer, помогите избавится от ошибок