Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизТип 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c