Seite 1 von 2

String Array Pointer

Verfasst: 24.05.2007 08:58
von hmi222
Hallo zusammen

Hab mal ne Frage zu nem String Pointer.

Würde gerne ein String array an eine Prozedur übergeben...
In der Prozedur möchte ich dann den Inhalt des String arrays
per PeekS() aus lesen...

Wenn ich die Pointer der einzelnen Arrayelemente übergebe ist ok, aber mit dem ganzen Array Krieg ich es leider nicht so ganz hin.

Vielen Dank im vorraus

Verfasst: 24.05.2007 10:09
von real
PeekS macht nichts anderes, als einen Speicherbereich vom Startpointer bis zum stringterminierenden \0 zurueckzugeben. Jeder String im Array hat seinen eigenen Speicherbereich und somit Startpointer. Du kannst also nicht einfach ein komplettes Array ausgeben, sondern nur die Elemente selbst (wie Du ja schon festgestellt hast).

Verfasst: 24.05.2007 11:02
von Kaeru Gaman
im array selber stehen die stringpointer.
du kannst also den pointer zum array übergeben,
und in der proc kannst du aus dem ziel des arraypointers den stringpointer lesen
und von dort holst du den string mit PeekS.
dann erhöhst du den Arraypointer um 4, um dir den nächsten stringpointer holen zu können.
das ganze natürlich nur so oft, wie elemente vorhanden sind.

Verfasst: 24.05.2007 12:24
von hmi222
also im @StringPointer
steht die adresse des 1.elementes
im @StringPointer+4
steht die adresse des 2.elementes
...

Hab ich das so richtig verstanden?

Verfasst: 24.05.2007 14:03
von Leonhard
So hab ich das immer gehandhabt:

Code: Alles auswählen

; Autor: leo.tiger ALIAS 'leonhard' + Schick

;/ Array-Macros für Arrays mit 
Macro NewArray(StructureName, Elements)
  AllocateMemory(SizeOf(StructureName)*(Elements+1))
EndMacro
Macro FreeArray(ArrayPointer)
  FreeMemory(ArrayPointer)
EndMacro
Macro GetArrayElement(ArrayPointer, StructureName, Element)
  ArrayPointer+(SizeOf(StructureName)*Element)
EndMacro

Dim Array.s(3)

Array(0) = "Hallo"
Array(1) = ","
Array(2) = "Welt"
Array(3) = "!"

Procedure.s GetArrayItem(*Array, Element)
  Protected *Element.String = GetArrayElement(*Array, String, Element)
  
  ProcedureReturn *Element\s
EndProcedure

Define i.l
For i = 0 To 3
  Debug GetArrayItem(@Array(), i)
Next i
Ich hoffe, das hilft dir.

Mfg

leonhard

Verfasst: 24.05.2007 16:11
von hmi222
Danke leonhard...
werd's gleich testen!

Verfasst: 24.05.2007 16:15
von hmi222
Genau das was ich brauchte....
DANKE
:allright:

Verfasst: 24.05.2007 20:59
von hjbremer
Warum so kompliziert ?

Code: Alles auswählen

Dim Array.s(3) 

Array(0) = "Hallo" 
Array(1) = "," 
Array(2) = "Welt" 
Array(3) = "!" 

Procedure.s GetArrayItem(feld$(1), Element) ;oder auch feld.s(1), Element
  
   ProcedureReturn feld$(element)         ;oder auch feld.s(Element) ist egal
    
EndProcedure 

Define i.l 
For i = 0 To 3 
  Debug GetArrayItem(Array.s(), i) 
Next i

Verfasst: 24.05.2007 21:00
von Leonhard
Für dich eventuell Kompliziert. Ist aber schneller!

Verfasst: 24.05.2007 21:02
von Kaeru Gaman
> Warum so kompliziert ?

weil die frage nunmal war, wie man ein stringarray übergibt, und nicht, wie man eine procedur x-mal aufruft.