掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SetLengthで確保し、余ったものをなくすには? (ID:35436)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>文字数は、不定でお願いします。 自分で代入すべき文字数が判断できない,ということですか? う〜む. >ゴミデータって、指定した文字以外に入ることがあるんですか? 入るのではなく,既に値(データ)があるメモリ領域に確保されるということです. SetLength(s,100); とすると,この分は,他でつかっちゃいけないよ,となります. 実行済みのプロシージャー等の実行部分のメモリは不要となり使用可能となります(解放されると言います). またFreeメソッドやReleaseメソッドでは,該当部分のメモリが解放されます. つまり,他で使ってもいいよ.となります. でも,その部分のメモリ領域が初期化されるわけではありません. そのため,このデータがゴミとして,新たに確保されたメモリに残ることになります. 初期化したいのであれば,以下のように,既にあるレスのように,Null終端文字列で 扱えるように,初期化する方法もあります. (Delphi 6ならば動作すると思います) procedure TForm1.Button1Click(Sender: TObject); var S : String; begin SetLength(s,100); FillChar(S[1],Length(s)-1,0); s[1] := 'a'; s[2] := ' '; s[3] := 'b'; //ShowMessage(Trim(s)); でも可 ShowMessage(PChar(s)); end; どんな目的で,s[1] := 'a'; のようにするのかは分かりませんが, 単に文字の代入でしたら,以下の方法も考えられると思います. これでしたら,2バイト文字もそのまま扱えます. もっとも,この場合,文字の代入を自動でやるとしたら,ループで回すことになる かも知れませんので,あらかじめ,代入文字数を知る必要があるかも知れませんね. 代入する対象の文字を,どこから持ってくるのかというのも関係するかも知れません. procedure TForm1.Button1Click(Sender: TObject); var S : String; begin s := ''; s := s + 'a'; s := s + ' '; s := s + 'b'; ShowMessage(s); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.