Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];

Вниз

Объясните фокус с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
8-34134
Sour
2002-07-20 23:09
2002.11.11
Оттенки цвета


1-34035
Zergling
2002-10-30 14:12
2002.11.11
Удаление элемента из динамического массива


1-33937
Cr@sh
2002-10-31 19:04
2002.11.11
Работа с Word`ом


7-34279
Digitman
2002-09-03 12:34
2002.11.11
Сканирование списков модулей, загруженных в АП тек.процесса


1-33972
beginner
2002-11-01 12:08
2002.11.11
Редактор математического текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский