Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизОшибка при чтении 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c