
かれこれ、HSPを使い始めて4年目ですが、未だにちゃんと理解していない部分がありました。なんか悔しいので、紹介します。
sdim v1,256
とすると、v1という変数の領域を、256byte確保するものと思っていたのですが、
正確には、v1という変数の領域を、255byte + 終了コード(0)確保するようです。
つまり、nバイトの文字列変数を使うには、n+1バイトをsdimで確保し、変数の最後は、必ず0で終わるようにプログラムを書く必要があるようです。
↓のサンプルを見てください。
; 文字数、200未満なら問題無い
#const max 200
; メモリ確保
sdim v1,max
; データを'A'で埋める
repeat max
poke v1,cnt,'A'
loop
; 200になるハズだが、206になる
mes strlen(v1)
変数v1を、終了コードを無視して、データを書き込んだ場合、正常に文字列の長さを取得できなくなります。しかし、200byte未満の確保の場合、なぜか正常に動作しているようです。
ともかく、sdimの動作を誤解していると、大変なバグを生じる可能性がありますので、ご注意ください。