Главная страница
    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.016 c
2-1153351176
batya17
2006-07-20 03:19
2006.08.06
Закрытие окна


1-1150978339
Bundeskanzler
2006-06-22 16:12
2006.08.06
Поиск в TListView


9-1132021552
MonoLife
2005-11-15 05:25
2006.08.06
Как отобразить анимированный спрайт?


6-1143034305
Kacnep
2006-03-22 16:31
2006.08.06
Виснет при TidServerSocket.Active:=false; Инди 10


15-1150354588
ilya39
2006-06-15 10:56
2006.08.06
Стоит ли ехать в Питер перед саммитом G8?





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