デフォルト文字数(バッファサイズ)の情報は内部で特に保存されていないので、
自動拡張した場合は取り出すことができなくなります。ゆえに自分で保存する他ありません。
memcpy ……じゃなくて memset (ですよね?) を使うならデフォルトではなく
現在のバッファサイズを知るべきだと思うのですが
それで、それには以下の方法があります (黒魔術ですが)
> HSP開発wiki STRBUF
http://hspdev-wiki.net/?HSP3%2FSTRBUF
sdim a, 80, 2
dupptr size, varptr(a(1))-16, 4
mes strf("alloced\t= %d byte.",size)
a(1) = {"
012345678901234567890123456789
012345678901234567890123456789
012345678901234567890123456789
"} // 自動拡張
dupptr size, varptr(a(1)) - 16, 4
mes size
またdllを使えば容易にバッファサイズを知ることができます
(デバッグウィンドウが変数のバッファサイズを取得するときのを流用できる)
簡単なので作りました
→
http://www1.axfc.net/uploader/File/so/85043.zip (passなし)
ちなみに
> 200文字ではなく199バイトです
200バイトが確保されるけど使えるのは実質199バイトだけ、
と言ったほうが分かりやすいかと
> 要素ごとにPVal構造体を見る
この情報は PVal にはありません
PVal はあくまで変数1個を管理するものなので
> 連続しなくなった
バッファが連続してしまっていたら
要素ごとの自動拡張にすごく時間がかかりますし