こんなのを見つけました.
[Delphi の文字列型stringについて]
http://okwave.jp/qa/q9268853.html
おそらく,
var
buf : array [1..16] of Char;
buf : string[16];
の動作の違いのことだとは思うのですが,余計なコードもあり,
よく理解できませんが,テストしてみました.
テストコードは,目的のためだけに「絞り込んで」います.
String 型の変数の要素 0 には文字数が入ります.この要素 0 は操作できません.
文字列を代入すると,この要素 0 に文字数が格納されます.
途中の要素に「文字」を代入しても,要素 0 には文字数は格納されません.
つまり,文字列が代入されていないのと同状態となります.
動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro です.
テストする場合,文字列を初期化しないとゴミが入ることがあります.
※ レスしようと思ったのですが,登録が必要なのでやめました.
※ string[16] (短い文字列) は ShortString型
//=============================================================================
// フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
end;
//=============================================================================
// 文字列をChar型の配列で定義して使用
// 1文字づつ処理するには向いている
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
buf : array[1..16] of Char;
begin
//初期化
FillChar(buf, SizeOf(buf), #0);
for i := 1 to 16 do begin
buf[i] := Chr(Ord('A') + i - 1);
end;
Memo1.Lines.Add('Buttn1 : ' + Buf);
end;
//=============================================================================
// 長さ指定の文字列変数(短い文字列)の各要素に代入する場合
// 要素0には文字数が格納されるのであるが,このコードでは格納されない
// 実際に文字列を代入すると実際の文字数が要素0に格納される
//
// このようなコードを使う可能性はほとんどないと思うが...
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer;
buf : string[16];
begin
//初期化
buf := '';
for i := 1 to 16 do begin
buf[i] := AnsiChar(Ord('A') + i - 1);
end;
Memo1.Lines.Add('Buttn2 : ' + string(Buf));
end;
|