Текущий архив: 2002.11.11;
Скачать: CL | DM;
ВнизОбъясните фокус с PChar Найти похожие ветки
← →
_Nicola_ (2002-10-31 15:35) [0]Есть такой код:
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?
С нетерпением жду ответа.
← →
Юрий Федоров (2002-10-31 15:38) [1]Ну так а что в файле то?
← →
han_malign (2002-10-31 15:38) [2]f: file of PChar;
Так ты и сохраняешь указатели на строковые константы, лежащие в памяти процесса.
← →
MBo (2002-10-31 15:41) [3]PChar - указатель, так что в файл ты пишешь АДРЕСА строк - 2 раза по 4 байта. Записав и прочитав в одной программе в течение одного сеанса адрес, если не происходило реаллокации, ты, в общем, случайно, получил верные данные
← →
Skier (2002-10-31 15:42) [4]>MBo
> случайно, получил верные данные
Да он просто - шаман. :)))
← →
_Nicola_ (2002-10-31 15:44) [5]Сеансы были разные. Выгрузил программу, снова запустил, нажал _только_ Button2 - результат верный. Сейчас попробую комп перезагрузить.
← →
han_malign (2002-10-31 15:46) [6]>MBo
ну, допустим не случайно, exe-шник всегда мапируется на локальную память процесса одинаково, и константы всегда будут лежать по одному и тому же адресу(если конечно не перекомпилять программу с изменениями).
← →
han_malign (2002-10-31 15:48) [7]>_Nocola_
Измени значения констант, и посмотри что считается(если нет рухнет).
← →
_Nicola_ (2002-10-31 15:50) [8]Перезагрузил компьютер, запускаю exe-шник (без Дельфи), нажимаю _только_ Button2 - результат верный - в MemoDescr 2 строки. Это что - шайтан?
А у себя кто-нибудь это повторить не пробовал?
← →
Skier (2002-10-31 15:52) [9]>_Nicola_
А что ты вообще хочешь сделать ?
Головоломку ? :)
← →
MBo (2002-10-31 15:53) [10]>_Nicola_
han_malign © (31.10.02 15:46) уже объяснил - дело в том, что константы, пока не изменил программу, лежат по постоянному адресу.
← →
_Nicola_ (2002-10-31 15:56) [11]Изменил значения констант - при нажатии на Button2 в MemoDescr оказалась туфта. Это что - баг такой, или все так и задумано?
← →
_Nicola_ (2002-10-31 15:57) [12]2Skier ©
А причем здесь головоломки?
← →
Skier (2002-10-31 16:00) [13]>_Nicola_
При том что у тебя тип файла неверный.
И то чем ты здесь занимаешься называется - "головоломка"
← →
MBo (2002-10-31 16:03) [14]Используй string и TextFile
← →
Skier (2002-10-31 16:04) [15]>_Nicola_
А можно ещё TStringList. (проще всего...)
← →
_Nicola_ (2002-10-31 16:09) [16]2han_malign и остальным - спасибо за обьяснение.
2Skier ©
А чем он неверный?
Что - указатели запрещено хранить в файлах постановлением Microsofta?
Случайно в работе получил такой эффект, попросил обьяснить. А чем я "здесь" занимаюсь - это мое личное дело, и не вам судить.
← →
Skier (2002-10-31 16:15) [17]>_Nicola_
> Что - указатели запрещено хранить в файлах постановлением
> Microsofta?
Да нет, конечно ! Извини если что не так...
Страницы: 1 вся ветка
Текущий архив: 2002.11.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c