「文字列」の編集履歴(バックアップ)一覧はこちら
「文字列」(2010/06/01 (火) 14:46:53) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
ここでは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関数を見てください。