2016-11-02 8 views
0

私はQBasicを学んでおり、ユーザー定義のタイプexampleコードがドキュメントに見つかりました。この例では、ユーザー定義の型の中に文字列要素があり、その文字列には長さが定義されていません。QBasicのユーザ定義型の中で任意の範囲の文字列要素を宣言するには?

しかし、私のコンパイラはこの例では "Expected STRING * on ..."例外をスローします。テスト・ケースの文字列の長さを定義する:

TYPE Person 
    name AS STRING * 4 
END TYPE 

DIM Matheus AS Person: 
Matheus.name = "Matheus": 

PRINT Matheus.name: 

それは「数学」をログに記録し、「マテウスは」期待。この文字列の範囲を許可する方法はありますか?

注:私はQB64コンパイラに

答えて

2

を使用していません、でもQB64で、可変長文字列を使用する方法はありません。この機能を提供しているので、この機能が必要な場合は、FreeBASICを調べることができます。

TYPEは、指定されたフィールドを持つレコードタイプを作成し、レコードは固定長です。 OPEN ... FOR RANDOM仕様を見てください:

OPEN Filename$ FOR RANDOM AS #1 [LEN = recordlength%] 
  • recordlength%TYPE変数のLENまたはFIELD文を取得することによって決定されます。
  • OPENステートメントでレコード長が使用されていない場合、デフォルトレコードサイズは最後のレコードを除いて128バイトです。
  • レコードの長さは32767を超えないか、エラーが発生します。

TYPEは、動的にサイズある文字列を含むように意図されていませんでした。これにより、開発者は記録サイズを小さく保つことができます。たとえば、アドレス帳を持っていたら、人の名前が大きすぎないようにする必要はありません。そうしないと、アドレス帳はメモリに収まりません。

QB64は、オリジナルの目的が互換性を保つことを前提としていたため、おそらく以前のQBASICコードとの互換性を保つために、この制約を削除しませんでした。

+1

データがメモリ内でどのように構造化されているかを理解していれば、変数のポインタアドレスにBLOADingデータを追加してデータをオーバーロードすることができます。通常の方法ですべてのデータにアクセスすることはできませんが、配列内のオーバーロードされた変数のポインタを追跡することができれば、制限(種類)を得ることができます。 –

関連する問題