【QBASIC互換!?】FreeBasic【GPL】
■ このスレッドは過去ログ倉庫に格納されています
0646デフォルトの名無しさん
2016/09/17(土) 10:14:15.70ID:ejX8tU80sub Test(byval st as string ptr)
print *st
end sub
dim as string*10 a = "abcd"
print @a
Test(@a)
問題部分を抜き出してみた
まず言えることは、上記の例であれば、Test()関数のstring ptr型と変数aのポインタの型が違う
string型は内部にポインタ(記述子)を持つ構造体のようなもので
動的にメモリを確保して代入された文字列を格納する
だから@により得られるアドレスはその構造体のアドレス
strptr()関数で得られるアドレスは指し示す文字列のアドレスと2種類ある
string*N型のように固定長文字列にした場合、その両者のアドレスが同じになるけれど
その型のポインタは、その文字列のポインタとなる
関数の引数は、あくまでstring型のポインタだから
「passing different pointer types, as parameter 1(st) of TEST()」って警告が出る
結論としては、string型は可変長文字列として使うために用意された型なので
可変長文字列として扱うか、zstring型のポインタを代わりに使うかすれば良い
■ このスレッドは過去ログ倉庫に格納されています