![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тип String
Новичоккк © (2006-07-18 12:10:00)Всегда считал что максимальная длина строки - 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).
Ketmar (2006-07-18 20:57:00) [1]>Fay © (18.07.06 13:18) [10]
неа. а у вдруг меня LongWord? или вовсе Int64? %-)
Fay (2006-07-18 13:18:00) [2]2 Desdechado © (18.07.06 12:30) [9]
FFFFFFFF меньше нуля 8)
Desdechado (2006-07-18 12:30:00) [3]сорри, FFFFFFFF больше 2 млрд
Desdechado (2006-07-18 12:29:00) [4]> Так правильно делать?
А зачем?
Да и FFFF - это явно больше 2 миллиардов...
Palladin (2006-07-18 12:27:00) [5]ты бы почитал статью то? вопроса бы не возникло...
var
str:string;
ca:array [0..$FFFF] of Char;
size:integer;
begin
...
SetLength(str,size);
Move(str[1],ca[0],size);
...
end;
Новичоккк (2006-07-18 12:24:00) [6]Спасибо за разъяснения.
Еще один вопрос. Так правильно делать?
var
str:string;
ca:array [0..$FFFF] of Char;
size:integer;
begin
...
Move(str[1],ca[0],size);
...
end;
Fay (2006-07-18 12:18:00) [7]Не пол-гига, а 2 гига, конечно 8)
Desdechado (2006-07-18 12:17:00) [8]Дело в "Всегда считал". Язык развивается и догмы меняются.
Смотрим справку и видим, что String может хранить до 2 Гб, если он (как по умолчанию) интерпретируется как AnsiString. Если же (для совместимости с TP) интерпретируется как ShortString, то те самые 255 байтов.
Ну, и длина хранится в служебной области памяти до начала строки (адрес с минусом от адреса начала).
Fay (2006-07-18 12:17:00) [9]Это шутка? В Delphi нет типа String (грубо говоря).
Есть ShowString, AnsiString и WideString. По умолчанию string = AnsiString, который м.б. пол-гига
Elen (2006-07-18 12:16:00) [10]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 Но ты этого не заметишь. Радуйся
Palladin (2006-07-18 12:15:00) [11]http://www.rsdn.ru/article/Delphi/dynarrays.xml