Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как получить строку по указателю [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]

удивительно, а как он туда поместился?


Наверх

Титульная страница Поиск, карта сайта Написать письмо