Seite 2 von 6

Verfasst: 12.06.2007 02:23
von STARGÅTE
ah stimmt, ist mir noch nie aufgefallen, denn SizeOf gibt mir hier ja auch nur 16 (also 4 Felder) an
Structure T
 Waffe.l[4]
EndStructure
Debug SizeOf(T)
gut danke

Verfasst: 12.06.2007 09:39
von Thalius
Verdammt wieso bekomm ich beim lesen dieser Struct hunger ..? Muss an der Hitze liegen oder so ... :mrgreen:

Code: Alles auswählen

... "Waffe.l" ...
Sorry für OT ;)

Thalius

Verfasst: 13.08.2007 16:08
von Scarabol
@NTQ
Wieso benutzt du ständig Sizeof?

Kann man da nicht direkt die Werte eintragen?
Stehen doch in der Hilfe...

[Edit]
Nochwas, macht es einen Unterschied ob man ' oder " schreibt?
[/Edit]

Gruß
Scarabol

Verfasst: 13.08.2007 16:14
von Kiffi
Scarabol hat geschrieben:@NTQ [...]
schreib ihm lieber eine PN. Er ist in der letzten Zeit nicht so
häufig im Board.
Scarabol hat geschrieben:[Edit]
Nochwas macht es einen Unterschied ob man ' oder " schreibt?
[/Edit]
ja, ist ein (undokumentiertes?) Feature:

Code: Alles auswählen

Debug "e"
Debug 'e'
Grüße ... Kiffi

Verfasst: 13.08.2007 16:17
von Scarabol
Ok danke gibt also den Ascii zurück
Wieso wird sowas nicht kommentiert?

Achja nochwas,
Der letzte Parameter von WriteStructure ist ja ein Pointer, oder?
Wenn ja wieso passt der in einen Character Datentyp der eigentlich viel zu klein ist???

[Edit]
Habs inzwischen selbst rausgefunden. Diese übergabe bewirkt das jeder character des String einzeln abegerufen werden kann.

Kann man nicht direkt mit Sizeof die Größe der Struktur ermitteln?
[/Edit]

Gruß
Scarabol

Verfasst: 13.08.2007 17:22
von Scarabol
Kann ich damit auch solche Strukturen speichern, oder wie müsste ich den Code ändern?

structure intest
stuff.l
stuff.f
endstructure

structure test
test.intest[100]
endstructure

Gruß
Scarabol

Verfasst: 13.08.2007 18:31
von Scarabol
Wieso führt die Procedure ReadStructure auf ein L-Listen Element angewendet zu einem Error?

Gruß
Scarabol

Verfasst: 14.08.2007 00:52
von PMV
Scarabol hat geschrieben:Ok danke gibt also den Ascii zurück
Wieso wird sowas nicht kommentiert?
Das solltest du Fred fragen :wink:
Achja nochwas,
Der letzte Parameter von WriteStructure ist ja ein Pointer, oder?
Wenn ja wieso passt der in einen Character Datentyp der eigentlich viel zu klein ist???
Wie meinst du das? Hier solltest du einfach einen Pointer eines Strings
übergeben ... alles andere führt, spätestens zur laufzeit, zu unerklärlichen
und eventuell sogar spontanen Fehlern!
[Edit]
Habs inzwischen selbst rausgefunden. Diese übergabe bewirkt das jeder character des String einzeln abegerufen werden kann.

Kann man nicht direkt mit Sizeof die Größe der Struktur ermitteln?
[/Edit]
Welche Größe? Die des Strings? Nein, Sizeof ermittelt zur Compilerzeit
die Strukturgröße, ein String hat eine dynamische Länge. Das geht also
von der Logik her nicht. Als alternative zu NTQs Variante könnte man mit
PeekC() den String Zeichenweise einlesen, oder per PeekS() und
Zeichenlänge auf 1 setzten.
Kann ich damit auch solche Strukturen speichern, oder wie müsste ich den Code ändern?

structure intest
stuff.l
stuff.f
endstructure

structure test
test.intest[100]
endstructure
Intern siehts so aus, das du 100 mal die beiden Strukturfelder stuff.l und
stuff.f hast, also müsste der Strukturstring so aussehen:

Code: Alles auswählen

StrukturString$ = ""
For i = 0 To 99
  StrukturString$ + "lf"
Next
Wieso führt die Procedure ReadStructure auf ein L-Listen Element angewendet zu einem Error?

Gruß
Scarabol
Weil du etwas falsch machst :D ... falscher Strukturstring? ... ohne
Quellcode hilft da nur ne Glaskugel :wink:

MFG PMV

Verfasst: 14.08.2007 13:33
von NicTheQuick
Scarabol hat geschrieben:Kann ich damit auch solche Strukturen speichern, oder wie müsste ich den Code ändern?

structure intest
stuff.l
stuff.f
endstructure

structure test
test.intest[100]
endstructure
Ich habe eben extra für dich den Code geändert (s. 1. Post). In deinem
Beispiel wäre die Struktur jetzt als "[100lf]" abbildbar. Probier es einfach
mal aus.

Mit meinen Beispielen funktioniert alles. Aber man weiß ja nie. Also immer
schön Bugs reporten.

Warum ReadStructure() bei LinkedLists nicht funktioniert, weiß ich nicht.
Du gibst mir ja kein Beispiel, an dem ich es nachvollziehen kann.

Verfasst: 14.08.2007 18:25
von Scarabol
Erstma Danke an NTQ und natürlich an PMV.

So also hier mal ein Auszug meinse Codes (will euch die anderen 2600 Zeilen ersparen):

Code: Alles auswählen

          Struc = "lllffdllllsllll"
          c = ReadLong(1)
          ClearList(Ant())
          For i = 0 To c
            AddElement(Ant())
            ReadStructure(1, Ant(), @Struc)
          Next
Wenn ich das Programm ausführe führt der Befehl "Var\s = Space()" zu einem Invalid Memory Access.

Code: Alles auswählen

      Case 's'
        If length
          ReadData(FileId, *Var, length)
          *Var + length
        EndIf
        length = ReadLong(FileId)
; ---- hier kommt der Invalid Memory Access
        *Var\s = Space(length)
; ----
        ReadData(FileId, @*Var\s, length)
        *Var + SizeOf(String)
        length = 0
    EndSelect
[Edit]
Scheine das Problem vorläufig gelöst zu haben, lag daran das ich die Writestrings nicht mit einer Null beendet hab.
[/Edit]

Gruß
Scarabol