ここではAB4.24の文字列に付いての独自研究を紹介します。

あくまでstring.sbpといくつかの実験プログラムによって調べただけですので、
実際のところは開発者にお聞きください。

文字列型の構造

ABの文字列は次のように成っています。
文字列の大きさ(4バイト) 文字列データ(*Byte型)
そして文字列データの先頭アドレスをString型は持っています。

下のプログは文字列を入力し、その文字列データと長さに分解する例です。
#N88BASIC

[[Dim]] a As String
Dim i As DWord
Dim z[345] As Byte

[[Input]] a
wsprintf(z, "%u", a)
i=[[Val]](z)
[[Print]] [[MakeStr]](i);"の長さ=";[[GetDWord]](i-4)

_SYSTEM_ALLOCATED_STRING_INFO構造体

string.sbpには_SYSTEM_ALLOCATED_STRING_INFO構造体が定義さています。
すぐ後に_System_AllocatedStringInfoとして宣言されています。
これはすべての文字列を一元管理するものです。

#N88BASIC
Dim a As String
Dim b As String
Dim c As String
a = "1234567890"
b = "qwerty"
c = "1qaz2wsx"
Dim i As DWord
For i=0 To _System_AllocatedStringInfo.num-1
	Print Hex$(GetDWord(_System_AllocatedStringInfo.pAddress + i*4)), MakeStr(GetDWord(_System_AllocatedStringInfo.pAddress + i*4))
Next


ZeroString関数

次のプログラムの実行結果はどうなるでしょう。
#N88BASIC
Dim a As String
Dim b As String
a = ZeroString(10)
b = "abc" + a + "xyz"
Print [[Len]](b), b

答えは
16	abc
となります。
これは+演算が文字列の実際の長さを見ていないからです。
_System_StrCalc_Plus関数を見てください。

タグ:

+ タグ編集
  • タグ:
最終更新:2010年06月01日 14:46