Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизПроблема с move Найти похожие ветки
← →
Separator © (2005-11-27 08:37) [0]
var
fCells: array of array of PChar;
procedure SetCell(const ACol, ARow: Integer; const Value: String);
var
Len: Cardinal;
begin
FreeMemory(fCells[ARow, ACol]);
Len:= Length(Value);
fCells[ARow, ACol]:= GetMemoty(Len);
Move(Value[1], fCells[ARow, ACol][0], Len)
end
В общем если Len = 1 или 2, то при Move почему-то копируется 3 байта. Если Len = 4 то копируется 6 байт. И т.д.
← →
TUser © (2005-11-27 09:27) [1]прежде всего напиши
move(PChar(Value)[0],...
← →
TUser © (2005-11-27 09:28) [2]а точнее будет не move, а copymemory
← →
begin...end © (2005-11-27 10:02) [3]> TUser © (27.11.05 09:27) [1]
Зачем?
> TUser © (27.11.05 09:28) [2]
Почему?
← →
Separator © (2005-11-27 10:24) [4]
> TUser © (27.11.05 09:27) [1]
Точно зачем? Ведь String(value)[1] как раз и указывает туда, куда Pchar(value)[0]
← →
Набережных С. © (2005-11-27 11:13) [5]
> Move(Value[1], fCells[ARow, ACol][0], Len)
> если Len = 1 или 2, то при Move почему-то копируется 3 байта.
> Если Len = 4 то копируется 6 байт.
Этого не может быть, потому, что не может быть никогда:) И, кстати, копировать все-же нужно Len + 1 байт - PChar требуется завершающий нуль. Или использовать StrPCopy.
← →
Lamer@fools.ua © (2005-11-27 11:15) [6]>>Separator © (27.11.05 08:37)
>Move(Value[1], fCells[ARow, ACol][0], Len)
Нуль-терминатор Пушкин будет записывать?Move(Value[1], fCells[ARow, ACol][0], Len + 1)
К тому же, если Len = 0, лучше сразу присвоить:fCells[ARow, ACol] := nil
без Move.
← →
Separator © (2005-11-28 07:15) [7]Все, как оказалось все проблемы были именно из-за #0, точней из-за того, что я его не ставил.
← →
Separator © (2005-11-28 07:59) [8]Кстати, можете посмотреть:
http://Sergey-Vilgelm.narod.ru/source/spcsv.rar
Модуль предназначен для работы с CSV файлами.
Я хочу знать, какие еще там недочеты есть, как можно лучше написать.
В общем, просьба - укажите на ошибки
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.035 c