私のプログラムの一部は、タイプ char のバッファーから ASCII テキストを読み取ります。このバッファー自体には、印刷できない非 ASCII ガベージが含まれている可能性があります。のようにそのような領域を表示するShowMessage(strVar)
場合、ヌル文字 ( 0x00
) があると、文字列に印刷可能なテキストが含まれていても、文字列は表示されません。
だから私はこの小さな関数を書きました(私はこれらのトリックのために関数を書く習慣を身につけようとしていますが、まだあまり得意ではありません)、印刷できないnull文字の変数をきれいにします:
// 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;
それは問題なくコンパイルされ、実際にはいくつかのバッファセグメントで動作します...実際にはスペースをうまく取り除きますが、常にではありません。また、別のデータ ソース (ただし、時間の種類のデータ ソース) を使用すると、次のエラーが発生します。
なぜそれが正常にコンパイルされ、実際に一部のデータでは正常に動作し、他のデータでは正常に動作しないのかわかりませんか?