かれこれ、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の動作を誤解していると、大変なバグを生じる可能性がありますので、ご注意ください。