Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проще простого (размер строки) 
:(
    Опции темы
PsiMagistr
Дата 24.4.2011, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Давно прошли те счастливые времена, когда строка занимала в памяти по одному байту на каждый символ. Нынешние строки берут по два байта на символ. Так я думал до недавнего времени, счастливчик. Решил это дело проверить. И тут то у меня и не заладилось. Написал крайне простую программу:


Кнопка:

Код

procedure TForm1.Button1Click(Sender: TObject);
var r:String[1]; //Односимвольная строка
begin
 ShowMessage(IntToStr(Sizeof(r))+' Байта'); //РЕЗУЛЬТАТ 2 БАЙТА. ВСЕ ПО ПЛАНУ.
end;


.............................


var r:String[2]; //Двухсимвольная строка. Жду четырех байт.  По два на символ.



Жду напрасно. Три байта на выходе.

В чем же дело?


Версия Delphi XE









--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Keeper89
Дата 24.4.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Так все вроде правильно smile


--------------------
PM MAIL WWW   Вверх
PsiMagistr
Дата 24.4.2011, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Гм... Вроде должно быть 4 байта? Нет? Или я не врубаюсь? ))))


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Amphiluke
Дата 24.4.2011, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 6
Всего: 112



PsiMagistr, попробуйте var r:String[7];  smile 

На самом деле, у ShortString по байту на символ плюс один байт — на длину строки.
PM   Вверх
PsiMagistr
Дата 24.4.2011, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



Да?

var r:String[7]; 8 байт...


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Amphiluke
Дата 24.4.2011, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 6
Всего: 112



Да. Именно 8.
Вообще, почитайте встроенную справку Delphi, раздел Memory Management
Цитата(Delphi Help)

A string occupies as many bytes as its maximum length plus one. The first byte contains the current dynamic length of the string, and the following bytes contain the characters of the string.

The length byte and the characters are considered unsigned values. Maximum string length is 255 characters plus a length byte (string[255]).

И отыщите в КД прекрасную статью про строки («Тонкости работы со строками» называется, кажется)
PM   Вверх
PsiMagistr
Дата 24.4.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: 1
Всего: 1



благодарю всех за помощь.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
bems
Дата 24.4.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



SizeOf для всех строк кроме ShortString возвращает размер указателя.
Символы в ShortString это AnsiChar (1 байт), как и в AnsiString
Символы в WideString это WideChar (2 байта), как и в UnicodeString
String[n] это ShortString
String это AnsiString в старых делфях, и UnicodeString в новых
Char это AnsiChar в старых делфях и WideChar в новых

Это сообщение отредактировал(а) bems - 24.4.2011, 16:47


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 25.4.2011, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(bems @  24.4.2011,  16:44 Найти цитируемый пост)
Дата 24.4.2011, 16:44

На всякий случай, для полноты картины, стоит ещё упомянуть, что в Д1 и в TurboPascal тип string был ShortString.
Ибо есть в И-Нете куча примеров для TurboPascal'я


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.