Win32プログラミング講座 〜 Step15. Byte配列で行う文字列操作 〜Basicで文字列といったら、$マークをくっつけた変数や、String型で定義した変数を利用するんじゃ…
おっしゃる通り、以前までのBasicでは文字列といえば、String型変数でした。 しかしこのString型変数、扱いはとても簡単ですが、落とし穴もあります。難しい話になってしまいますが、文字列バッファ用のメモリを確保したり、解放したりする処理を独自に行っているため、Win32API用をはじめとするいくつかの機能はこれらメモリ操作のことを考慮してくれません。String型変数は、独自のプログラム内でのみの利用ならなんの問題もありませんが、Windowsアプリケーションの開発を行っていく上で、どうしても無理が生じる場合があります。 そこで登場するのか、Byte配列の変数。メモリ確保、解放などの処理が必要ないため、比較的単純な構造をしています。こちらもコツさえつかんでしまえば、扱いはとても簡単です。C言語を経験したことがあるかたなら、以下のプログラムが同等のものであるといえば、一発で理解できるでしょう。 Dim a[100-1] As Byteイコール char a[100]; ActiveBasicでは、Win32APIなどを通し、Windowsアプリケーション開発を行う場合は、なるべくByte配列を利用することを推奨します。ここから以下は、Byte配列の変数を利用した文字列操作の方法を紹介します。 Byte配列のデータ構造 Byte配列の文字列は、定義した範囲内の長さを持つ、 NULL終端の非常にシンプルな構造をしています。NULLとは、文字コード0のデータのことを意味します。
![]() 通常、配列変数のデータを扱うときは a[0]、a[1] などというように、変数名の後にカッコをつけ、任意の配列要素を指定します。文字列内の任意の文字を扱うときはこの表記方法を用いますが、文字列の先頭ポインタを扱うときは、変数名だけを指定することがあります。少しややこしい話になりますが、以下の2つの意味は同じになります。
a 文字列のコピー
先頭の2行のDim命令で、256バイトずつ(合計512バイト)文字列用のバッファを定義しています。 lstrcpy(コピー先のバッファポインタ, コピー元のバッファポインタ) Byte配列に対して、a="ABCDEFG" や、a=a+b などといった演算はできないので、慣れるまでは注意しましょう。 文字列の連結 試しに、馴染みの深いString型変数を利用して文字列連結の操作を行ってみましょう。
これと同じ動作をByte配列を用いて再現すると、以下のようなプログラムに書き換えることができます。
lstrcatは、文字列連結のための関数であり、以下のようなパラメータを持ちます。 lstrcat(連結先文字列, コピー元文字列) 文字列の消去 任意の個所の文字列を消去するのは、Byte配列の得意分野かもしれません。
上のプログラムのように、消去したい文字列を示す位置に0を入れるだけで実現できます。この0というのは、一般的に、NULL文字と呼ばれるもので、文字列の終端部分を表すときに用いられます。 BytePtr型の変数 BytePtr型変数とは、Byte配列の先頭ポインタを管理する変数のことを指します。先頭ポインタの変更ができる点を除けば、Byte配列と扱い方は変わりません。
トップへ戻る
|