超初心者の質問です

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
井上翔太
記事: 12
登録日時: 2005年10月22日(土) 13:17
お住まい: 京都市
連絡する:

超初心者の質問です

#1 投稿記事 by 井上翔太 »

コード: 全て選択

buf=String$(100,Chr$(0))
これがActiveBasicの本にのっていたのですが、いまいち意味がわかりません
だれか教えてくださいm(_ _)m
yama
記事: 58
登録日時: 2005年5月31日(火) 21:11
お住まい: 新潟市
連絡する:

#2 投稿記事 by yama »

Chr$(0)はNULL文字です。感覚的にですが

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

文字列変数として使用するため100の領域をbufとして確保しますということ。
原稿用紙100マス分の空をとります。ということでしょうか。
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

Re: 超初心者の質問です

#3 投稿記事 by Indigo Visualist »

僕も余り詳しいわけではないのですが、

コード: 全て選択

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

あと、文字コードが0の時だけは、ZeroStringが使えるんですよね。確か。
ご参考になれば幸いです。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#4 投稿記事 by イグトランス »

そのようにして先にString型のメモリを確保しておく技法は,その後API関数に渡して,確保したメモリへ文字列を書き込んでもらうと言う事をする為に良く使います。
API関数はAB独自のStringなんて知るわけもないので,ただString型の変数を渡す事はできないのです。
井上翔太
記事: 12
登録日時: 2005年10月22日(土) 13:17
お住まい: 京都市
連絡する:

わかりました

#5 投稿記事 by 井上翔太 »

コード: 全て選択

String$(100,Chr$(0))
(0)の部分はメモリを確保しないといういみなんですね??
たとえば(1000)なら1000文字分メモリを確保するという意味なんですね?
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: わかりました

#6 投稿記事 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) と書いたことと同じになります。
返信する