Delphi в мире Юникода
f65d50f6

Использование FillChar


Вызов 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;



Содержание раздела