Форум: "Начинающим";
Текущий архив: 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