Das liegt daran, dass Strings in Structuren nicht nacheinander im Speicher liegen, wenn es dynamische Strings sind.
Erstmal hier ein einfaches Beispiel:
Code: Alles auswählen
Structure myString
s.s
EndStructure
Debug "myString hat die Größe: " + SizeOf(myString)
Define p.myString
Debug "p hat die Größe: " + SizeOf(p)
Debug ~"Setze p\\s = \"Hallihallo\""
p\s = "Hallihallo"
Debug "p hat immer noch die Größe: " + SizeOf(p)
Debug "Das heißt der String muss irgendwo anders sein."
Debug "Das hier ist die Speicherstelle der strukturierten Variable: " + StrU(p)
Debug "Das hier ist ihr Inhalt interpretiert als Integer (gleiche Größe wie myString): " + StrU(PeekI(p))
Debug "Hinter diesem Pointer liegt aber der String:" + PeekS(PeekI(p))
Warum das ganze? Strings können sich im Laufe des Programms in ihrem Inhalt und ihrer Länge ändern. Strukturen haben aber zur Laufzeit immer die selbe Größe. Deswegen kannst du einen Speicherbereich voller Strings unbekannter Länge nicht einfach einem strukturierten Pointer zuweisen.
Was du aber machen kannst, ist folgendes. Wenn deine Strings in der Datasection alle die selbe Länge haben, dann kannst du Fixed Length Strings verwenden. Es irritiert zwar etwas, dass du 3 Zeichen pro String angeben musst, obwohl die Strings in der Datasection nur 2 Zeichen haben, aber das liegt an dem Nullcharacter hinter jedem String. Fixed Length Strings haben keinen Nullcharacter, deswegen simulieren wir ihn durch ein eigenes Zeichen.
Code: Alles auswählen
Structure StringList
i.s{3}[0]
EndStructure
Define *p.StringList
*p = ?mydata
Debug *p
ShowMemoryViewer(*p,?mydataend-?mydata)
Debug *p\i[0]
Debug *p\i[1]
Debug *p\i[2]
Debug *p\i[3]
Debug *p\i[4]
Debug *p\i[5]
DataSection
mydata:
Data.s "t1", "t2", "t3", "t4", "t5", "t6"
mydataend:
EndDataSection