Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.08.31;
Скачать: [xml.tar.bz2];

Вниз

типы   Найти похожие ветки 

 
zibert   (2013-10-02 21:42) [0]

Dxe4. пишу без проверки на d (сейчас нет возможности проверить), но было примерно так. Поясните, почему так?

..Unit1;
..
Type TMy=Record
x:String[32];
..
end;
..
Impl..
..
uses unit2;
..
proc..e MyForm.Btn1Click(sender:..);
begin
showmessage(inttostr(sizeof(TMy.x))); // показывает 33
end;

proc..e MyForm.Btn2Click(sender:..);
begin
showmessage(inttostr(myproc2(TMy.x))); // показывает 3, а жду 32 -  - - почему?
end;

..Unit2;
..
fun..n MyProc2(s:string):integer;
begin
result:=sizeof(s)-1;
end;


 
zibert   (2013-10-02 21:44) [1]

может неправильно функцию вызываю? как правильно передать параметр, чтобы размер показала?


 
Германн ©   (2013-10-02 22:43) [2]

Все размеры показаны абсолютно верно.


 
DVM ©   (2013-10-02 22:46) [3]


> Поясните, почему так?

потому, что string - ссылочный тип и имеет размер указателя, т.е 4 байта в 32 бит системах, и в своей функции MyProc2 ты замеряешь размер указателя и вычитаешь из него 1. Надо поменять тип параметра функции на shortstring.


 
DVM ©   (2013-10-02 22:48) [4]


> zibert

И вообще, для вычисления дины строки есть функция Length()


 
zibert   (2013-10-02 23:35) [5]

length в первом и втором случае случае покажет неправильные значения. я пробовал. мне нужно получить размер подзаписи\подтипа который в [скобках] в типе указан.


 
zibert   (2013-10-02 23:37) [6]

>> и в своей функции MyProc2 ты замеряешь размер указателя и вычитаешь из него 1

а, кажется доходит. т.е. в myproc2 я беру размер не от того что в нее засылаю, а от переменной в ее параметрах... тогда вот вопрос - как в ней вычислить то, что указано в [] в типе.


 
zibert   (2013-10-02 23:40) [7]

>> shortstring
а при этом все мои юникоды в стр. не обрежет?


 
Германн ©   (2013-10-02 23:59) [8]


> мне нужно получить размер подзаписи

Размер x:String[32] всегда будет 33. Независимо от длины строки, которая в нем хранится.

> а при этом все мои юникоды в стр. не обрежет?

Обрежет. Так же как и в String[32].


 
DVM ©   (2013-10-03 00:00) [9]


> zibert   (02.10.13 23:35) [5]


> мне нужно получить размер подзаписи\подтипа который в [скобках]
> в типе указан.

ясно


> а при этом все мои юникоды в стр. не обрежет?

Смотря как ты свои юникоды туда положишь. String[32] - это тоже shortstring и вообще говоря не юникод.

Хочу заметить, что параметр надо объявить не как shorstring непосредственно (его размер 255), а так:

TMyString = string[32];

TMyRec=Record
 x: TMyString;
end;

function MyProc2(s: TMyString): integer;

только нафига это все надо непонятно, размер строки нам и так известен.


 
zibert   (2013-10-03 00:19) [10]

спасиб, сеня попробую.


 
zibert   (2013-10-03 00:26) [11]

>>  String[32] - это тоже shortstring

как же так? там вроде в хелпе читаю, что если

mystr0:shortstring;
mystr1:ansistring;
mystr2:widestring;
mystr3:unicodestring;

а unicodestring почти = string умолчальному (w+a)

то по ихнему (и как думаю)
String[32]=должно быть widestring[32] как минимум, ну а как ожидаю unicodestring[32], с соответствующими размерами позиций разными (sizeof(y[1])), где y - тип строки


 
zibert   (2013-10-03 00:28) [12]

т.е. в последнем sizeof должно показать как минимум 2(4?). а по вашему будет 1?


 
zibert   (2013-10-03 00:34) [13]

блин чегото савсем запутался. мне нужно что - еще раз - получить размер подтипа в скобках. их там очень много и отдельные константы не оч. хочется объявлять. может не так объясняю? :(
вот вопрос, имея запись типа Type TMy в сообщении [0] могу я какой-нибудь функцией, не зная описания типа вытащить размер подтипов записи, т.е.
..
uses unit1;
..
var
x:TMy;
..
Imp..

Fun..n MyRecLen(r:?):integer;
begin
result:=length\sizeof\or (r) // ?
end;


 
DVM ©   (2013-10-03 00:36) [14]


> как же так?

А вот так.
string[32] - это короткая Ansi строка, такая как была в старом добром паскале (почти). Ее размер 33 (32 символа + нулевой байт под размер), в чем ты сам убедился.


 
zibert   (2013-10-03 00:36) [15]

где r - это какаято временная переменная x или на худой случай сам тип.


 
zibert   (2013-10-03 00:38) [16]

[14]
спасибо. пойду еще раз читать :( пока не доходит.


 
DVM ©   (2013-10-03 00:38) [17]


> zibert   (03.10.13 00:34) [13]


> блин чегото савсем запутался. мне нужно что - еще раз -
> получить размер подтипа в скобках. их там очень много и
> отдельные константы не оч. хочется объявлять. может не так
> объясняю? :(

Приведи точное описание входных данных и того, что ты хочешь получить. А то многоточия одни какие то.


 
Anatoly Podgoretsky ©   (2013-10-03 00:49) [18]

А ты тоже отвечай многоточиями


 
ProgRAMmer Dimonych ©   (2013-10-03 09:36) [19]

> Приведи точное описание входных данных и того, что ты хочешь
> получить. А то многоточия одни какие то.

<OffTop>
Это не многоточия. Это эти, как их?.. Немноготочия! Многоточия — они вот такие: … Ну или в крайнем случае вот такие: ...
</OffTop>


 
Dimka Maslov ©   (2013-10-03 12:01) [20]

1. Используй array[1..32] of Char
2. Используй sizeof
3. ???
4. PROFIT



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2014.08.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.002 c
15-1391254319
xayam
2014-02-01 15:31
2014.08.31
Проводник для больших папок


2-1380886196
Rezolik
2013-10-04 15:29
2014.08.31
tClientDataSet


4-1269440249
Елена
2010-03-24 17:17
2014.08.31
Определить что установлена Win 7


15-1391027402
Юрий
2014-01-30 00:30
2014.08.31
С днем рождения ! 30 января 2014 четверг


2-1380552472
ixen
2013-09-30 18:47
2014.08.31
Хэширование строк в SHA1





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