ポインタ値の比較

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

ポインタ値の比較

#1 投稿記事 by hira »

コード: 全て選択

#N88BASIC
Dim a As String
Dim in As BytePtr,limit As BytePtr
a="1234567890"
in=StrPtr(a)
limit=StrPtr(a)+10
Do
	in=in+1
	Print in
Loop While in<limit
以上のコードで、Print文が1回しか実行されません。
今までは動作していたのですが、これは元々できない仕様のはずだったのでしょうか?
※Loop While in As Long<limit As Long とすれば正常動作します
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#2 投稿記事 by マティ »

hiraさんのコードはあっていると思います。

今回問題となっているのでin<limitの部分です。

本来 < , <= は true になり > , >= は false になるはずですが、

AB4.11.03では、< , <= は false で > , >= は true になっています。

= , <> は正常に判定できるようです。

山本様調査お願いします。
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#3 投稿記事 by マティ »

先ほどの調査結果が間違っていたかも知れません。

どうもActiveBasicの比較処理は
右辺と左辺がBytePtrの場合は文字列として処理を行うようです。

そうすると、この件は仕様上はあっていると思われますので
キャストして使う必要があります。

みなさんは右辺と左辺がBytePtrの場合は文字列となる
仕様に関してどう思います?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

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

> 右辺と左辺がBytePtrの場合は文字列となる仕様

+演算子の場合は両辺ともBytePtrでは文字列とはならないようなのでそれと揃えてほしいです。
どちらかと言うとBytePtr同士の比較演算をポインタ変換にするほうが私は良いと思います。
http://www.discoversoft.net/forum/viewtopic.php?t=459
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#5 投稿記事 by 山本 »

イグトランス さんが書きました:+演算子の場合は両辺ともBytePtrでは文字列とはならないようなのでそれと揃えてほしいです。
どちらかと言うとBytePtr同士の比較演算をポインタ変換にするほうが私は良いと思います。
了解しました。ニュアンス的に、ポインタ値同士の演算という捉え方が正しいのかもしれません。

次回のバージョンアップで「左辺、右辺のいずれか、又は両方がString型の場合のみ、文字列比較演算として扱う」という仕様に修正する方向で考えます。
返信する