Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.011 c
15-1152612658
Maverik
2006-07-11 14:10
2006.08.06
навеяно разговором разработчика и заказчика


15-1152440821
OSokin
2006-07-09 14:27
2006.08.06
Что сейчас было?


2-1152733502
XeON
2006-07-12 23:45
2006.08.06
Добавление записи в динамический массив


2-1152862806
LEX85
2006-07-14 11:40
2006.08.06
TTreeview


15-1152613746
SoftService
2006-07-11 14:29
2006.08.06
J2ME compiler





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский