Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pchar, string 
:(
    Опции темы
Гость_guest
Дата 27.8.2004, 08:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











st: string;
ch: Pchar;

st = '12345'+#0+#0+'....';

Как прочитать st в ch полностью, не ограничиваясь #0 ???
И наоборот из ch в st ???
  Вверх
NiJazz
Дата 27.8.2004, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Из string в PChar - StrPCopy
Из PChar в string:
var s: string;
.......
PChar(s) - s преобразуется в PChar.
.......
PM MAIL   Вверх
Гость_guest
Дата 27.8.2004, 11:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











strpcopy прочитатет до #0
  Вверх
youri
Дата 27.8.2004, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



Цитата
Как прочитать st в ch полностью, не ограничиваясь #0 ???

По идее, тип string - динамический, т.е. если присвоить переменной типа string другую строку (более длинную), то переменная будет занимать больше места и не факт, что она будет расположена по тому же адресу. В смысле не понятно, что значит полностью?
PM   Вверх
Гость_guest
Дата 27.8.2004, 13:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











полностью - значит с нулевыми символами и после них, вот !!!!
  Вверх
Girder
Дата 27.8.2004, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



А чем вы вообще сдесь пишите. И ТО И ДРУГОЕ ЭТО УКАЗАТЕЛИ!

Но:
а)St:String;
-Это указатель на следующий тип
-1)@St-указывает на 1 символ
-2)(@St-X)-размер строки
-3)Полный размер St равен X+[@St-X]+1
б)Ch:PChar;
-Это указатель на ячейку памяти в которой может находится все что угодно и любого типа. И по этому: нам надо знать его длину.

Вопрос задан конкретный: как скопировать?

Как два байта переслать... даже не используя на прямую API
Код
procedure TForm1.Button1Click(Sender: TObject);
type TArrB=array of byte;
var s,s2:string;
   p:PChar;
   i:integer;
begin
s:='Girder'+#0+#0+'Girder';
i:=Length(s);
p:=PChar(Copy(TArrB(s),0,i)); //string->PChar
SetLength(s2,i);
s2:=String(Copy(TArrB(p),0,i)); //PChar->string
...
end;


Ну а если тебе надо в какую - то кучу это скопировать... в какую либо позицию этой кучи, то для этого есть API. К примеру WriteProcessMemory, ReadProcessMemory ну и т.д. При этом надо знать формат того чего ты копируеш и формат который готова принять обратная сторона

Это сообщение отредактировал(а) Girder - 31.8.2004, 16:33


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
decoder
Дата 27.8.2004, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



из стринг в пичар - LPCTSTR

Это сообщение отредактировал(а) decoder - 27.8.2004, 14:49
--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
Girder
Дата 27.8.2004, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



decoder енто все хорошо когда текст(или что там) на ходится в закрытой памяти. Компилятор, тогда сам разберется и не даст тебе использовать один и тот же указатель.

А иначе....

Как тебе вот такой пример:
Код
procedure decoder(P:PChar);
begin
asm
 push eax
 mov eax,p
 mov byte ptr [eax],41h
 pop eax
end
end;

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
   p:LPCTSTR;
begin
s:='   decoder';
SetLength(s,Length(s)+1);
s[Length(s)]:='!';
p:=PAnsiChar(s);
decoder(PChar(s));
caption:=p;
end;
Что ты увидеш на экране?

PS: В Delphi аналог для LPCTSTR - это PAnsiChar

decoder тут на днях Kesh вспомнил бородатый анекдот... Про то, что компилятор Delphi не даст себе ногу от стрелить. Но поверь это не так! Как и любой другой компилятор при кривых ручках... он и голову позволит...

Удачи.

Это сообщение отредактировал(а) Girder - 27.8.2004, 15:30


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
decoder
Дата 27.8.2004, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 18.5.2004
Где: Харьков(хохол, к сожалению)

Репутация: нет
Всего: -1



2Girder
Проверить не решился, на слово верю...

звЫняюсь за дезинформацию withstupid.gif

--------------------
Молчать, я вас спрашиваю!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.