Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.08.31;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.006 c
2-1381400402
Error-Code-0xDEADBEEF
2013-10-10 14:20
2014.08.31
проектирование бд


2-1380884262
Вася
2013-10-04 14:57
2014.08.31
как освободить память после вызова функции?


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


2-1381237944
12345
2013-10-08 17:12
2014.08.31
получить строку


2-1381050306
Антипов В.А.
2013-10-06 13:05
2014.08.31
Как расшифровать коды сканера штрих-кодов?