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

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

Объясните фокус с PChar [D4, Win95/98]


_Nicola_ ©   (2002-10-31 15:35:00) 

Есть такой код:
procedure TFormMain.Button1Click(Sender: TObject);
var s1, s2: PChar;
f: file of PChar;
begin
s1 := "11111111117";
s2 := "22222222222228";
AssignFile(f, "fl.txt");
Rewrite(f);
Write(f, s1, s2);
CloseFile(f);
end;

procedure TFormMain.Button2Click(Sender: TObject);
var ed, rt: PChar;
f: file of PChar;
begin
AssignFile(f, "fl.txt");
Reset(f);
Read(f, ed, rt);
CloseFile(f);
MemoDescr.Lines.Append(ed);
MemoDescr.Lines.Append(rt);
end;

Запускаем, нажимаем Button1, затем Button2, в MemoDescr отображается:
11111111117
22222222222228
Вроде все, как и должно быть. НО! Размер файла fl.txt - ВСЕГО 8 байт!!! Как там может поместиться 2 строки 11111111117 и 22222222222228?
С нетерпением жду ответа.


Skier   (2002-10-31 16:15:00) [1]

>_Nicola_

> Что - указатели запрещено хранить в файлах постановлением
> Microsofta?

Да нет, конечно ! Извини если что не так...


_Nicola_   (2002-10-31 16:09:00) [2]

2han_malign и остальным - спасибо за обьяснение.

2Skier ©
А чем он неверный?
Что - указатели запрещено хранить в файлах постановлением Microsofta?
Случайно в работе получил такой эффект, попросил обьяснить. А чем я "здесь" занимаюсь - это мое личное дело, и не вам судить.


Skier   (2002-10-31 16:04:00) [3]

>_Nicola_
А можно ещё TStringList. (проще всего...)


MBo   (2002-10-31 16:03:00) [4]

Используй string и TextFile


Skier   (2002-10-31 16:00:00) [5]

>_Nicola_
При том что у тебя тип файла неверный.
И то чем ты здесь занимаешься называется - "головоломка"


_Nicola_   (2002-10-31 15:57:00) [6]

2Skier ©
А причем здесь головоломки?


_Nicola_   (2002-10-31 15:56:00) [7]

Изменил значения констант - при нажатии на Button2 в MemoDescr оказалась туфта. Это что - баг такой, или все так и задумано?


MBo   (2002-10-31 15:53:00) [8]

>_Nicola_
han_malign © (31.10.02 15:46) уже объяснил - дело в том, что константы, пока не изменил программу, лежат по постоянному адресу.


Skier   (2002-10-31 15:52:00) [9]

>_Nicola_
А что ты вообще хочешь сделать ?
Головоломку ? :)


_Nicola_   (2002-10-31 15:50:00) [10]

Перезагрузил компьютер, запускаю exe-шник (без Дельфи), нажимаю _только_ Button2 - результат верный - в MemoDescr 2 строки. Это что - шайтан?
А у себя кто-нибудь это повторить не пробовал?


han_malign   (2002-10-31 15:48:00) [11]

>_Nocola_
Измени значения констант, и посмотри что считается(если нет рухнет).


han_malign   (2002-10-31 15:46:00) [12]

>MBo
ну, допустим не случайно, exe-шник всегда мапируется на локальную память процесса одинаково, и константы всегда будут лежать по одному и тому же адресу(если конечно не перекомпилять программу с изменениями).


_Nicola_   (2002-10-31 15:44:00) [13]

Сеансы были разные. Выгрузил программу, снова запустил, нажал _только_ Button2 - результат верный. Сейчас попробую комп перезагрузить.


Skier   (2002-10-31 15:42:00) [14]

>MBo

> случайно, получил верные данные

Да он просто - шаман. :)))


MBo   (2002-10-31 15:41:00) [15]

PChar - указатель, так что в файл ты пишешь АДРЕСА строк - 2 раза по 4 байта. Записав и прочитав в одной программе в течение одного сеанса адрес, если не происходило реаллокации, ты, в общем, случайно, получил верные данные


Юрий Федоров   (2002-10-31 15:38:00) [16]

Ну так а что в файле то?


han_malign   (2002-10-31 15:38:00) [17]

f: file of PChar;
Так ты и сохраняешь указателина строковые константы, лежащие в памяти процесса.


Наверх

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