Главная страница
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.044 c
4-1142237804
Arazel
2006-03-13 11:16
2006.06.04
Надо узнать в какое время вчера ОС завершилось?


2-1148036145
lobach
2006-05-19 14:55
2006.06.04
Ошибка при отмене


2-1148011660
Rubey
2006-05-19 08:07
2006.06.04
Ввод через DBGRID


3-1144506558
veb
2006-04-08 18:29
2006.06.04
Получить порядковый номер


15-1147526071
boriskb
2006-05-13 17:14
2006.06.04
Госдума приравняла российских программистов к малому бизнесу,