我的程序的一部分从 char 类型的缓冲区读取 ASCII 文本,该缓冲区本身可能包含一些不可打印的非 ASCII 垃圾。当显示这样的区域时,例如 in 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;
它可以编译,并且实际上可以在某些缓冲区段上工作……它确实可以很好地去除空格,但并非总是如此。其他时候,使用不同的数据源(但数据源的时间类型),我收到此错误:
我无法弄清楚为什么它可以编译并且实际上在某些数据上可以正常工作,但在其他数据上却不行?