ページ 11

超初心者の質問です

Posted: 2006年7月07日(金) 07:33
by 井上翔太

コード: 全て選択

buf=String$(100,Chr$(0))
これがActiveBasicの本にのっていたのですが、いまいち意味がわかりません
だれか教えてくださいm(_ _)m

Posted: 2006年7月07日(金) 08:54
by yama
Chr$(0)はNULL文字です。感覚的にですが

buf=String$(100,Chr$(0))は

文字列変数として使用するため100の領域をbufとして確保しますということ。
原稿用紙100マス分の空をとります。ということでしょうか。

Re: 超初心者の質問です

Posted: 2006年7月07日(金) 18:05
by Indigo Visualist
僕も余り詳しいわけではないのですが、

コード: 全て選択

buf=String$(100,Chr$(0))
恐らくbufはString型ですよね。でしたらメモリの確保/再確保は自動的に行われるはずですが、
先にこれだけ使いますよと予約しておいて、再確保の回数を減らす事による高速化か、
あるいは中身を初期化するために、全部0で上書きしているかのどちらかではないでしょうか。
どちらも単なる推測ですけれど・・・。

あと、文字コードが0の時だけは、ZeroStringが使えるんですよね。確か。
ご参考になれば幸いです。

Posted: 2006年7月07日(金) 18:23
by イグトランス
そのようにして先にString型のメモリを確保しておく技法は,その後API関数に渡して,確保したメモリへ文字列を書き込んでもらうと言う事をする為に良く使います。
API関数はAB独自のStringなんて知るわけもないので,ただString型の変数を渡す事はできないのです。

わかりました

Posted: 2006年7月07日(金) 20:26
by 井上翔太

コード: 全て選択

String$(100,Chr$(0))
(0)の部分はメモリを確保しないといういみなんですね??
たとえば(1000)なら1000文字分メモリを確保するという意味なんですね?

Re: わかりました

Posted: 2006年7月07日(金) 20:31
by 7
> の(0)の部分はメモリを確保しないといういみなんですね??
> たとえば(1000)なら1000文字分メモリを確保するという意味なんですね?
そうではありません。 String$(100,Chr$(0)) の太字の部分が確保するメモリの量を表していて、(0)の部分は文字コードを表しています。

String$関数は指定された文字を指定された数だけ連結する関数で、 String$(100,Chr$(0)) なら、Chr$(0) っていう文字(NULL文字)が100個並んでる文字列を作りなさいってことです。

Indigo Visualistさんがすでに書かれていますけど、 String$(100,Chr$(0)) は、 ZeroString(100) と書いたことと同じになります。