Seite 1 von 1
CopyMemoryString()
Verfasst: 08.05.2013 20:45
von Martin66119
Guten abend,
folgenden Code habe ich im Netz gefunden. An sich verstehe ich das; wenigstens halb
Code: Alles auswählen
*MemoryID = AllocateMemory(5000)
*Pointer = *MemoryID
CopyMemoryString("Hello", @*Pointer)
CopyMemoryString("World")
Debug PeekS(*MemoryID)
Warum wird "HalloWorld" ausgegeben. Das hängt doch bestimmt daran, dass der String "Hallo" nicht mit dem NuLL-Zeichen abgeschlossen ist. Aber wie schließt man den String mit dem Nullzeichen ab?
__________________________________________________
Code-Tags hinzugefügt
08.05.2013
RSBasic
Re: CopyMemorySting()
Verfasst: 08.05.2013 22:03
von Kiffi
<OT>
RSBasic hat geschrieben:Code-Tags hinzugefügt
@Martin66119: Jemand. der hier schon seit mehr
als 8 Jahren dabei ist, sollte nicht in jedem dritten
Posting die Code-Tags vergessen. Du solltest doch
eigentlich wissen, wie es geht. Ich bewundere
Rays Geduld...
</OT>
Re: CopyMemorySting()
Verfasst: 08.05.2013 22:15
von Martin66119
Das stimmt, dass ich schon einige Jahre hier bin. Das einzige was ich aber mal gemacht hatte,ist über den Parallelport Datvon einem AD-Wandler einzulesen und eine Wandlung mit dem Strobe zu starten. Für den Zugriff auf den Port habe ich, ich glaube eine Lib hier aus dem Forum genutzt. Damals wollte ich nur Spannungen messen. Seit dieser Zeit habe ich eigentlich nichts mehr gemacht; aber Fragen gestellt.
Sorry für mein Unwissen.
Re: CopyMemorySting()
Verfasst: 09.05.2013 09:33
von dysti
Also @Martin66119,
wenn du die Hilfe von PB für CoyMemoryString aufgerufen hättest, dann wäre folgendes zu lesen gewesen:
Mit Code-Tags:
Code: Alles auswählen
*String = Die Adresse des zu kopierenden Strings. Der String muss mit einem Null-Zeichen abgeschlossen ("null-terminiert") sein. Der String wird im PB String-Format erwartet.
Das bedeutet, das deine Ausage -
Das hängt doch bestimmt daran, dass der String "Hallo" nicht mit dem NuLL-Zeichen abgeschlossen ist.
- total falsch ist.
Damit erledigt sich auch der zweite Teil deiner Überlegungen bzw. Frage.
Den Rest kannst du in der PB-Hilfe nachlesen.
Re: CopyMemoryString()
Verfasst: 09.05.2013 17:31
von Sicro
Martin66119 hat geschrieben:Warum wird "HalloWorld" ausgegeben.
Ich verstehe nicht, was dich daran verwundert.
Vielleicht das fehlende Leerzeichen? Dafür musst du schon selber sorgen, denn CopyMemoryString fügt keins ein.
Edit:
Achso, du wunderst dich warum das Nullzeichen hinter "Hello" nicht erhalten bleibt...
Re: CopyMemoryString()
Verfasst: 09.05.2013 18:21
von Kevin
Martin66119 hat geschrieben:Guten abend,
folgenden Code habe ich im Netz gefunden. An sich verstehe ich das; wenigstens halb
Code: Alles auswählen
*MemoryID = AllocateMemory(5000)
*Pointer = *MemoryID
CopyMemoryString("Hello", @*Pointer)
CopyMemoryString("World")
Debug PeekS(*MemoryID)
Warum wird "HalloWorld" ausgegeben. Das hängt doch bestimmt daran, dass der String "Hallo" nicht mit dem NuLL-Zeichen abgeschlossen ist. Aber wie schließt man den String mit dem Nullzeichen ab?
CopyMemoryString(*String, [*ZielMemoryID])
Wird *ZielMemoryID weggelassen, wird die Adresse des vorherigen Aufrufs verwendet. (Die Adresse vor dem Null zeichen) das Nullzeichen wird zusätzlich gesetzt wie folgender Code zeigt:
Code: Alles auswählen
*MemoryID = AllocateMemory(5000,#PB_Memory_NoClear)
FillMemory(*MemoryID,5000,$ffffffff)
*Pointer = *MemoryID
Debug "vor dem kopieren: "+Hex(PeekC(*MemoryID+StringByteLength("Hello")))
CopyMemoryString("Hello", @*Pointer)
Debug "nach dem kopieren: "+Hex(PeekC(*MemoryID+StringByteLength("Hello")))
CopyMemoryString("World")
Debug "nach dem 2ten kopieren: "+Chr(PeekC(*MemoryID+StringByteLength("Hello")))
Debug PeekS(*MemoryID)
Ausgabe: hat geschrieben:vor dem kopieren: FFFF ; weil alles auf $FF durch FillMemory gesetzt wurde
nach dem kopieren: 0 ;das Nullzeichen
nach dem 2ten kopieren: W ;das 'W' von World
mfg
kevin
Re: CopyMemoryString()
Verfasst: 09.05.2013 21:07
von Martin66119
Vielen vielen Dank,
nun klappt es.