|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
FillCharで、高速に、文字列に文字を埋めることができることを知りました
が、これって、扱う文字数に変な制限があるんでしょうか?
つまり、以下の例で98文字以上は埋めることができません。
{---------------------------------------------------------}
{フォームにMemo1を貼り付けます}
var
aStr: ShortString;
j: integer;
implementation
{$R *.DFM}
function NoA(Str: ShortString): String;
var
i,Len: integer;
ch: char;
begin
i:=1;
Len:=Length(Str);
while (Str[i]='a') or (i<=Len) do
inc(i);
dec(i);
Result:=IntToStr(i);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
j: integer;
begin
Memo1.Clear;
Memo1.Lines.Add('SizeOf(aStr)='+
IntToStr(SizeOf(aStr))); {256}
FillChar(aStr,SizeOf(aStr),'a');
Memo1.Lines.Add('i='+NoA(aStr)); {i=97}
Memo1.Lines.Add(aStr); {'aaaa..(略)..aa'}
{実際、97個の'a'表示}
end;
[A]
FillCharは、
procedure FillChar(var X; Count: Integer; value);
と宣言されており、配列、レコード、または文字列を、valueで指定した任意
の文字、Count個で埋めることができる、とあります。この、文字列、という
のは、くせ者です。
aStr: ShortString;
FillChar(aStr,SizeOf(aStr),'a');
これは、aStr[0]:='a'; ということもやっているわけです。ord(aStr[0])=97、
つまり、この場合、文字数を97に制限していることになります。従って、こ
の場合、
FillChar(aStr,SizeOf(aStr),'a');
{aStr[0]からaStr[SizeOf(aStr)-1]に'a'を充填}
aStr[0]:=chr(SizeOf(aStr)-1);
{あるいは、SetLength(aStr,SizeOf(aStr)-1);}
{文字数を調整}
というように、先頭に文字数バイトを入れてやれば、ShortStringにも
FillCharが使えます。
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|