2016-11-02 2 views
0

Ich lerne QBasic und fand einen benutzerdefinierten Typ example Code in einer Dokumentation. In diesem Beispiel befindet sich ein Zeichenfolgenelement in einem benutzerdefinierten Typ und für diese Zeichenfolge ist keine Länge definiert.Wie deklariere ich ein beliebiges Range-String-Element innerhalb eines benutzerdefinierten Typs in QBasic?

Allerdings mein Compiler löst die Ausnahme "Erwartete STRING * am ..." für dieses Beispiel. Testfall definiert, die String-Länge:

TYPE Person 
    name AS STRING * 4 
END TYPE 

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

PRINT Matheus.name: 

Es protokolliert "Math", erwartet "Matheus". Gibt es eine Möglichkeit, einen Bereich für diese Zeichenfolge zuzulassen?

Hinweis: Ich verwende QB64 Compiler

Antwort

2

Nein, es ist kein Weg, um eine Zeichenfolge variabler Länge zu verwenden, auch mit QB64. Sie können in FreeBASIC schauen, wenn Sie diese Funktion möchten, da sie es bietet.

TYPE erstellt einen Datensatztyp mit den angegebenen Feldern und Datensätze haben eine feste Länge. Schauen Sie sich die OPEN ... FOR RANDOM Spezifikation:

OPEN Filename$ FOR RANDOM AS #1 [LEN = recordlength%] 
  • recordlength% wird bestimmt, indem die LEN einer TYPE Variable bekommen oder eine FIELD Aussage.
  • Wenn in der Anweisung OPEN keine Satzlänge verwendet wird, beträgt die Standardsatzgröße 128 Byte, mit Ausnahme des letzten Datensatzes.
  • Eine Datensatzlänge darf 32767 nicht überschreiten oder ein Fehler tritt auf!

TYPE wurde nie enthalten Strings gedacht, die dynamisch Größe sind. Dies ermöglicht einem Entwickler, die Aufzeichnungsgrößen klein zu halten. Wenn Sie beispielsweise ein Adressbuch haben, möchten Sie nicht, dass die Namen der Personen zu groß sind, sonst würde das Adressbuch nicht in den Speicher passen.

QB64 hat diese Einschränkung nicht entfernt, wahrscheinlich, um die Kompatibilität mit älterem QBASIC-Code aufrechtzuerhalten, da das ursprüngliche Ziel darin bestand, die Kompatibilität zu wahren.

+1

Wenn Sie wissen, wie die Daten im Speicher strukturiert sind, können Sie möglicherweise zusätzliche Daten durch BLOADing von Daten in die Zeigeradresse der Variablen überladen. Sie werden nicht auf alle Daten mit normalen Mitteln zugreifen können, aber wenn Sie Verfolger von überladenen Variablen in einem Array verfolgen können, können Sie die Beschränkung (Art von) umgehen. –

Verwandte Themen