Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1081879501
VirusIP
2004-04-13 22:05
2004.05.02
Помогите разобратся с Radiobutton...


8-1074579145
Игорь
2004-01-20 09:12
2004.05.02
Свой видеоплеер


3-1080775565
Angel_Forever
2004-04-01 03:26
2004.05.02
Подключение и взаимодействие с БД на сервере SQL-Server


14-1081750751
dolmat
2004-04-12 10:19
2004.05.02
Linux or Windows?


1-1081915436
msgipss
2004-04-14 08:03
2004.05.02
Как можно определить тип данных в Variant





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский