Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Тип 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо