忍者ブログ

GAM-22のメモ

HSPのsdimのバッファ確保の罠

2024.05 ← 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 →

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

HSPのsdimのバッファ確保の罠

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

PR
この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事にトラックバックする
トラックバックURL:
カテゴリー
カウンター
最新記事
最新コメント
Twitter
人気記事
Amazon お買い得情報
Amazon お買い得情報
プロフィール
自画像
HN :
GAM-22
性別:
男性
職業:
大学1年生
HSP暦:
6年
好きなもの :
ゲーム, アニメ, マヨネーズ
嫌いなもの :
運動, 注射, ホラー映画, 英語
好きなバンド :
Muse, Radiohead
その他 :
文章能力が欠如している
バナー
Copyright © GAM-22のメモ All Rights Reserved
Powered by ニンジャブログ Designed by ピンキー・ローン・ピッグ 忍者ブログ / [PR]