![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при чтении string из файла [D7, XP]
AlexanderMS © (2006-05-16 18:55:00)Подскажите, пожалуйста, почему выдаётся ошибка в коде следующего вида:
var s : string;
.....
begin
With TFileStream.Create do
begin
......
read(s, 3); {здесь ошибка}
......
end;
.......
Тогда я объявляю массив of char и читаю через цикл. А как нужно? И почему ошибка?
TUser (2006-05-16 20:24:00) [1]SetLewngth (S, nnn);
read (s[1], nnn);
Rial (2006-05-16 19:11:00) [2]Вывод:
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);
Desdechado (2006-05-16 19:06:00) [3]если прочитать справку внимательно
function Read(var Buffer; Count: Longint): Longint;
то увидим, что тип Buffer не указан, зато стоит var, что говорит, что это указатель на место в памяти, которое должно быть выделено заранее, причем размером не менее Count
а т.к. String заранее память не выделяет, то и ошибка будет
можно использовать Pchar и GetMem
Palladin (2006-05-16 19:04:00) [4]потому что сама по себе 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;