Вызов FillChar также нужно проверить при работе со строками и символами. Рассмотрим следующий код: var Count: Integer; Buffer: array[0..255] of Char; begin // Существующий код - неправильный, потому что string = UnicodeString Count := Length(Buffer); FillChar(Buffer, Count, 0); // Правильный код для Юникода - любой из вариантов верный Count := SizeOf(Buffer); // <<-- Задание размера буфера в байтах Count := Length(Buffer) * SizeOf(Char); // <<-- Задание размера буфера в байтах FillChar(Buffer, Count, 0); end;
Length возвращает размер в символах, но FillChar ожидает, что Count будет в байтах. В этом случае вместо Length нужно использовать SizeOf (или нужно умножить Length на размер Char).
Кроме того, так как по умолчанию размер Char равен 2, FillChar заполнит строку байтами, а не символами, как раньше.
Пример: var Buf: array[0..32] of Char; begin FillChar(Buf, Length(Buf), #9); end;
Это заполнит массив символами с кодом не $09, а $0909. Чтобы получить прежний результат, код нужно изменить: var Buf: array[0..32] of Char; begin .. StrPCopy(Buf, StringOfChar(#9, Length(Buf))); .. end;