String Array Pointer

Anfängerfragen zum Programmieren mit PureBasic.
hmi222
Beiträge: 69
Registriert: 23.03.2007 13:20
Kontaktdaten:

String Array Pointer

Beitrag 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
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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).
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
hmi222
Beiträge: 69
Registriert: 23.03.2007 13:20
Kontaktdaten:

Beitrag 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?
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag 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
hmi222
Beiträge: 69
Registriert: 23.03.2007 13:20
Kontaktdaten:

Beitrag von hmi222 »

Danke leonhard...
werd's gleich testen!
hmi222
Beiträge: 69
Registriert: 23.03.2007 13:20
Kontaktdaten:

Beitrag von hmi222 »

Genau das was ich brauchte....
DANKE
:allright:
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Für dich eventuell Kompliziert. Ist aber schneller!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten