Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Ошибка при чтении string из файла   Найти похожие ветки 

 
AlexanderMS ©   (2006-05-16 18:55) [0]

Подскажите, пожалуйста, почему выдаётся ошибка в коде следующего вида:

var s : string;
.....
begin
With TFileStream.Create do
begin
 ......
 read(s, 3);   {здесь ошибка}
 ......
end;
.......


Тогда я объявляю массив of char и читаю через цикл. А как нужно? И почему ошибка?


 
Palladin ©   (2006-05-16 19:04) [1]

потому что сама по себе s является указателем на блок памяти содержащий данные, следовательно что бы прочитать
var
s:string;
n:Integer;
With TFileStream.Create do
begin
......
read(n, SizeOf(n));   {здесь ошибки наверно нет}
SetLength(s,n);
read(s[1],n);
......
end;
.......

правда необходимо что бы строка была записана этим образом (хотя с этого вообще то и нужно было начинать ответ)

var
s:String;
n:Integer;
....
n:=Length(s):
With TFileStream.Create do
begin
......
write(n, SizeOf(n));   {здесь ошибки небудет}
write(s[1],n);
......
end;


 
Desdechado ©   (2006-05-16 19:06) [2]

если прочитать справку внимательно
function Read(var Buffer; Count: Longint): Longint;
то увидим, что тип Buffer не указан, зато стоит var, что говорит, что это указатель на место в памяти, которое должно быть выделено заранее, причем размером не менее Count
а т.к. String заранее память не выделяет, то и ошибка будет

можно использовать Pchar и GetMem


 
Rial ©   (2006-05-16 19:11) [3]

Вывод:

Var L:Integer;
    S:String;
....
L:=Length(S);
Write(L,SizeOf(L));
Write(Pointer(S)^,L);

Чтение

Read(L,SizeOf(L));
SetLength(S,L);
Read(Pointer(S)^,L);


 
TUser ©   (2006-05-16 20:24) [4]

SetLewngth (S, nnn);
read (s[1], nnn);



Страницы: 1 вся ветка

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.063 c
3-1144652237
DancerMan
2006-04-10 10:57
2006.06.04
Поиск по индексированному полю типа integer


4-1142001409
pirate
2006-03-10 17:36
2006.06.04
Работа с буфером обмена


2-1147794211
AlexanderMS
2006-05-16 19:43
2006.06.04
Проблема с чтением с помощью TFileStream


4-1142234174
Chaser
2006-03-13 10:16
2006.06.04
Определить активное ДОС-окно


15-1146932102
Anatoly Podgoretsky
2006-05-06 20:15
2006.06.04
Купил монитор