Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.017 c
1-34046
ton2
2002-10-30 18:29
2002.11.11
Помогите с ProcessMessagees!


1-33975
Sectey
2002-11-01 12:17
2002.11.11
Сравнение текстовых файлов


14-34172
AL2002
2002-10-21 13:41
2002.11.11
Задача.


14-34245
kull
2002-10-22 14:53
2002.11.11
SQL Precompiler...


14-34174
Ruteniy
2002-10-17 09:38
2002.11.11
---|Ветка была без названия|---