> strrep命令について置換文字数や置換元の文字数に何か制限はありますか?
書いてないのは、書き忘れか、環境依存などで明記できないかとかそのあたりかもしれません。
わからないなら自分で調べるのも一つの手です。
testsize = int(powf(2, 29))
; testsize = 0x528F8DFF
mes "文字数:" + (testsize-1)
sdim s, testsize
; 全て同じ文字で埋める
memset s, 'A',testsize
poke s, testsize - 1, 0
;mes s
; 置き換え
strrep s, "A", "B"
;mes s
; 置換出来たかチェック
mes "最初の文字 " + strmid( s, 0, 1 )
mes "最後の文字 " + strmid( s, testsize - 2, 1 ) ; testsize - 1 は終端文字0
testsizeの大きさを変えてテストしてみました。
1385139712 = 0x528F8E00
#Error 1 in line 9 (???) -->システムエラーが発生しました
sdimで発生。無制限だったのでは…?
このサイズで何回かやっているとエラーが出ないこともあります。
1073741824 = int(powf(2, 30))
#Error 1 in line 11 (???) -->システムエラーが発生しました
strrepで発生。流石に大きすぎたようです。境界はどこでしょうね?
2147483648 = int(powf(2, 31))
#Error 20 in line 9 (???) -->バッファオーバーフローが発生しました
pokeで発生。あれ? sdim 通ってる。
あとは、実際に自分が使おうとしている範囲で何度かテストしてみて問題が起きないなら気にしなくていいと思います。
問題が起きてから、その時に対策を考えるようにしたほうが開発は前に進みますね。
> HSP命令リファレンスによく書かれていないことも知りたいです。
量がすごいですからね。書き忘れも多いと思います。
また作っていても気が付かない制限事項が出来ることもあります。
全部を書き出すとなると、デバッグする人を大量に準備する必要がありそう。
自分が使う予定があって、条件がシビアなのもについてだけ聞くとかしたほうが良いと思います。
たくさんあると思うので…。
> また、HSP命令リファレンスに書かれたすべての命令及び関数について何か制限や使い方を誤ると
> エラーになることやエラーに表示されないことはありますか?
文字列変数を memset で初期化したものの終端文字(0)入れ忘れると0のとこまで際限なく読んでしまいます。
文字列変数をバイト単位で操作していると終端文字を忘れて変な結果になるのはよくやってしまいがち。
上記スクリプト書くときも忘れてました。
> 命令と関数の欠点の把握のためです。
あまり気にして調査ばかりしてしまい制作が進まない…とかよくあります。
このスレでまとめて調査できるといいですね。他にも書き込んでくれる人がいるといいのだけど…。(チラッチラッ)