名前 題名 ▼ Mr.XRAYさん > こんなのを見つけました. > > [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; > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link