Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Внизработа с указателями Найти похожие ветки
← →
han (2004-04-14 11:21) [0]function SomeFunction(const Value: String);
var
p: Pointer;
begin
p := AllocMem(SizeOf(...));
String(p^) := Value;
... ... ...
end;
Как узнать требуемый размер для указателя?
← →
panov © (2004-04-14 11:22) [1]p := AllocMem(Length(Value));
← →
VAleksey © (2004-04-14 11:24) [2]Length(Value)
← →
Skier © (2004-04-14 11:53) [3]а SetLength(...) не проще будет использовать ?
← →
Владислав © (2004-04-14 12:05) [4]
p := AllocMem(SizeOf(...));
String(p^) := Value;
Что то я с трудом верю в работоспособность такой конструкции.
← →
han (2004-04-14 12:08) [5]Так вот именно что не работает, Length точно не канает, так как String занимает больше чем его длина
← →
Владислав © (2004-04-14 12:10) [6]Чего сделать то надо?
← →
Amoeba © (2004-04-14 13:09) [7]Пусть автор по-человечески опишет свою задачу. Есть подозрение, что он просто идет не по тому пути (IMHO).
← →
han (2004-04-14 19:35) [8]Надо в Pointer загнать значение переменной типа String.
← →
Гаврила (2004-04-14 19:38) [9]Почему бы не использовать такой поинтер, как PChar ?
StrNew, и так далее
← →
Jack128 © (2004-04-14 19:39) [10]
> Надо в Pointer загнать значение переменной типа String.
так??
function SomeFunction(const Value: String);
var
p: Pointer;
begin
p := AllocMem(SizeOf(string));
String(p^) := Value;
... ... ...
end;
Только перед FreeMem незабудь сделать Finalize..
← →
panov © (2004-04-14 19:43) [11]>han (14.04.04 19:35) [8]
Надо в Pointer загнать значение переменной типа String.
Ну в pointer ты его не загонишь, так как SizeOf(Pointer)=4.
function SomeFunction(const Value: String):Pointer;
var
p: Pointer;
begin
p := AllocMem(Length(Value)+1);
move(value[1],p^,Length(Value));
Result := p;
end;
← →
han (2004-04-14 19:43) [12]Так я и делал, вот только SizeOf(string) всегда = 4.
А что касается
"Почему бы не использовать такой поинтер, как PChar ?
StrNew, и так далее"
то что имелось ввиду так далее? а использовать надо только Pointer, так как функция которая обрабатывает его может тянуть оттуда как строковые значения, так и числа.. все зависит от случая
← →
Fay © (2004-04-14 19:43) [13]
GetMem(p, Length(Value+1));
Move(PChar(Value)^, p^, Length(Value)+1)
2Jack128 © (14.04.04 19:39) [10]
p := AllocMem(SizeOf(string));
Это шутка?
← →
han (2004-04-14 19:45) [14]а это уже интересснее, а почему +1 ? Типа там хранится еще информация о длинне строки поэтому на один байт больше?
← →
Fay © (2004-04-14 19:46) [15]Там #0. Не хочешь его - не бери 8)
← →
Jack128 © (2004-04-14 19:47) [16]
> [12] han (14.04.04 19:43)
как так? Как я или как Панов?
> SizeOf(string) всегда = 4
Естественно, ведь string - это тоже указатель
> а использовать надо только Pointer, так как функция которая
> обрабатывает его может тянуть оттуда как строковые значения,
> так и числа.. все зависит от случая
То есть функция принимает указатель на данные? Тогда см Панов или можно проще
var
s: string
begin
s := "Мой входной параметр";
MyFunc(Pointer(PChar(s)));
end;
← →
panov © (2004-04-14 19:48) [17]>Fay © (14.04.04 19:43) [13]
Move(PChar(Value)^, p^, Length(Value)+1)
Длина строки Length(Value).
← →
Jack128 © (2004-04-14 19:50) [18]
> 2Jack128 © (14.04.04 19:39) [10]
> p := AllocMem(SizeOf(string));
> Это шутка?
Отнюдь. Такой код вполне работоспособен, другое дело, что редко используется. К достоинством можно отнести то, что он работает при {$H-}
← →
Fay © (2004-04-14 19:50) [19]2panov © (14.04.04 19:48) [17]
Я знаю, что ты знаешь, что я это (Длина строки Length(Value)) знаю
← →
Anatoly Podgoretsky © (2004-04-14 20:17) [20]Еще ьольшее сомнение вызывает этот код
function SomeFunction(const Value: String);
← →
Fay © (2004-04-14 20:19) [21]Вас смущает const или лишняя переменная?
← →
Тимохов © (2004-04-14 20:20) [22]отсутствие результата
← →
Fay © (2004-04-14 20:23) [23]Здесь?
function SomeFunction(const Value: String):Pointer;
var
p: Pointer;
begin
p := AllocMem(Length(Value)+1);
move(value[1],p^,Length(Value));
Result := p;
end;
← →
Тимохов © (2004-04-14 20:25) [24]нет, здесь
han (14.04.04 11:21)
function SomeFunction(const Value: String);
var
p: Pointer;
begin
p := AllocMem(SizeOf(...));
String(p^) := Value;
... ... ...
end;
← →
Fay © (2004-04-14 20:27) [25]8)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c