Часть моей программы считывает ASCII-текст из буфера типа char, который сам может содержать какой-то непечатаемый не-ASCII-мусор. При отображении таких областей, как в ShowMessage(strVar)
, при наличии нулевых символов (0x00
) строка не отображается, даже если в ней есть печатный текст.
Итак, я написал эту небольшую функцию (я пытаюсь привыкнуть писать функции для этих трюков, но все еще не очень хорош в этом), чтобы очистить переменную от любых непечатаемых нулевых символов:
// FUNCTION RemoveNullChars : Removes 0x00 from strings, which cause empty string
// fields if not removed sometimes
function TForm1.RemoveNullChars(strValue: string): String;
var
i : integer;
NullChar : char;
begin
NullChar := Chr($00);
for i := 0 to Length(strValue) do
begin
if strValue[i] = NullChar then
strValue[i] := ' ';
end;
result := strValue;
end;
Он компилируется нормально и на самом деле работает с некоторыми сегментами буфера... он действительно удаляет пробелы, но не ВСЕГДА. В других случаях, с другими источниками данных (но источником данных типа времени), я получаю эту ошибку:
Я не могу понять, почему он компилируется нормально и действительно работает нормально с некоторыми данными, но не с другими?