![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как получить строку по указателю [D7, XP]
redlord © (2006-06-17 18:06:00)всем привет
у меня есть переменная тип integer
в ней лежит указатель на строку (string), как получить строку?
ЮЮ (2006-06-19 03:49:00) [1]string это и есть указатель на "строку". Integer сюда ещё зачем приплетать? Более того, с подсчетом ссылок. И если получить указатель на локальную string, как у тебя, то очень скоро это ссылка будет "битой"
DevilDevil (2006-06-18 14:20:00) [2]> если я не ошибаюсь
Ошибаешься, не указывай длинну, если этого не требуется
redlord (2006-06-18 12:30:00) [3]to DevilDevil
если я не ошибаюсь то перед применением ентой функции
переменную стринг нужно подготовить тобиш указать ей размер
а это не всегда возможно так как он не известен
var s:string[255];
begin
s:=getstr(p);
...
end;
DevilDevil (2006-06-17 23:25:00) [4]Господи, смилуйся над этими грешниками...
function GetStr(P : integer) : string;
begin
Result := pchar(P);
end;
sniknik (2006-06-17 19:22:00) [5]> хотя если машина интерпретирует последовательность бит не обращая внимания на тип переменной
машина зачастую даже не догадывается о типах в языке... а большинство делфевских типов это просто "разграничители" для контроля программистов. с этим можно делать то и интерпретировать так, а вот с этим другое и по другому... хотя в машинном представлении это одно и тоже. (пример тот же pointer-integer, byte-char, int64-currency)
Asail (2006-06-17 19:18:00) [6]А, вообще, не нравится мне такой подход. Вот, к примеру, захочешь перенести сей код (когда-нибудь) на 64-битную операционку... ИМХО - весело будет...
Asail (2006-06-17 19:15:00) [7]
> хотя если машина интерпретирует последовательность бит не
> обращая внимания на тип переменной
Если бы обращала - фиг она бы тебе дала в интегер указатели на строки пихать :-)
tButton (2006-06-17 19:13:00) [8]ну да =)
фактически Integer принимает значения от -2^31 до +(2^31-1)
хотя если машина интерпретирует последовательность бит не обращая внимания на тип переменной, то вопрос снимаю =)
sniknik (2006-06-17 19:06:00) [9]WParam, LParam в TMessage (параметр сообщений системы) тоже интежер, но тем не менее указатели в них при нужде передают
> но значимых битов только 31 если я всё правильно перепутал?
попутал, знак тоже значимый... (если это ты его "отнял")
Пусик (2006-06-17 19:04:00) [10]> но значимых битов только 31
Почему?
Virgo_Style (2006-06-17 19:04:00) [11]tButton © (17.06.06 18:54) [4]
Что такое "(не)значимый бит" применительно к указателю?
tButton (2006-06-17 18:54:00) [12]
> а в чем сложность, те же 4 байта.
но значимых битов только 31 если я всё правильно перепутал?
выходит, что половина адресов не влезает
или у машины на этот счёт особое мнение?
StriderMan (2006-06-17 18:38:00) [13]
> удивительно, а как он туда поместился?
а в чем сложность, те же 4 байта.
я иногда пользуюсь TComponent.Tag для хранения указателей на все что угодно
palva (2006-06-17 18:25:00) [14]
{$APPTYPE CONSOLE}
var
s1, s2: String;
i: Integer;
Begin
s1 := 'Proba';
i := Integer(@s1);
s2 := PString(i)^;
WriteLn(s2); // Proba
End.
tButton (2006-06-17 18:16:00) [15]удивительно, а как он туда поместился?