Главная страница
    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.01 c
15-1152772975
Alien1769
2006-07-13 10:42
2006.08.06
Требование по ресурсам 1С


3-1148922065
alpha5
2006-05-29 21:01
2006.08.06
Странная ошибка


2-1152902215
Борщ
2006-07-14 22:36
2006.08.06
картинка как progressbar


2-1153298686
Handle
2006-07-19 12:44
2006.08.06
ShortCut


15-1152088865
Zvrb
2006-07-05 12:41
2006.08.06
Преобразования десятичного числа в шестнадцатиричное в Excel 2003





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский