![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с move [D7, WinXP]
Separator © (2005-11-27 08:37:00)
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 байт. И т.д.
Separator (2005-11-28 07:59:00) [1]Кстати, можете посмотреть:
http://Sergey-Vilgelm.narod.ru/source/spcsv.rar
Модуль предназначен для работы с CSV файлами.
Я хочу знать, какие еще там недочеты есть, как можно лучше написать.
В общем, просьба - укажите на ошибки
Separator (2005-11-28 07:15:00) [2]Все, как оказалось все проблемы были именно из-за #0, точней из-за того, что я его не ставил.
Lamer@fools.ua (2005-11-27 11:15:00) [3]>> 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.
Набережных С. (2005-11-27 11:13:00) [4]
> Move(Value[1], fCells[ARow, ACol][0], Len)
> если Len = 1 или 2, то при Move почему-то копируется 3 байта.
> Если Len = 4 то копируется 6 байт.
Этого не может быть, потому, что не может быть никогда:) И, кстати, копировать все-же нужно Len + 1 байт - PChar требуется завершающий нуль. Или использовать StrPCopy.
Separator (2005-11-27 10:24:00) [5]
> TUser © (27.11.05 09:27) [1]
Точно зачем? Ведь String(value)[1] как раз и указывает туда, куда Pchar(value)[0]
begin...end (2005-11-27 10:02:00) [6]> TUser © (27.11.05 09:27) [1]
Зачем?
> TUser © (27.11.05 09:28) [2]
Почему?
TUser (2005-11-27 09:28:00) [7]а точнее будет не move, а copymemory
TUser (2005-11-27 09:27:00) [8]прежде всего напиши
move(PChar(Value)[0],...