![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объясните фокус с 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;
Так ты и сохраняешь указателина строковые константы, лежащие в памяти процесса.