PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Komisches Verhalten String + Overlay



stefan_Z
13.01.2010, 15:26
Ich wundere mich gerade etwas über Bascom. Ggfs. wisst ihr ja mehr...

Ich habe einen String-Array von 8x1 Zeichen
Den möchte jetzt in einem Stück adressieren und habe dafür ein String-Overlay mit 8 Zeichen über dem Array erstellt.

Wenn ich das Overlay nutze enthalten danach aber alle Array-Elemente ZWEI Zeichen!

Ich vermute mal einfach, dass jeder Einzelstring noch ein Stoppzeichen enthält - damit könnte meine Implementierung sogar zu ziemlich komischen Fehlern führen, denn die Stoppzeichen sind ja jetzt weg!

Verwendeter Code:


Dim Char_buffer(8) as String * 1
Dim Char_buffer_overlay as String * 8 at Char_buffer(1) Overlay

Char_buffer_overlay = "12345678"

Char_buffer(1) ist dann "12", Char_buffer(2) ist "34", usw.

peterfido
13.01.2010, 17:23
Ich nutze für sowas immer Bytes. Jeder String wird nach der letzten Stelle abgeschlossen. Was auch Sinn macht, wenn z.B. ein 80er String nur 2 Zeichen enthält.


Dim Char_buffer(8) as byte
Dim Char_buffer_overlay as String * 8 at Char_buffer(1) Overlay

Char_buffer_overlay = "12345678"

Michael
13.01.2010, 17:28
Hallo stefan_z,

zu Strings in Bascom muß man wissen, daß ein String mit einer Null abgeschlossen wird. Ein String ist also immer ein Byte länger als der Faktor in der Definition.
Das steht aber alles in der Bascom-Hilfe.

Gruß, Michael

for_ro
13.01.2010, 20:10
Dim Char_buffer(8) as byte
Dim Char_buffer_overlay as String * 8 at Char_buffer(1) Overlay

Char_buffer_overlay = "12345678"
Hallo peterfido,
dies ist allerdings etwas gefährlich. Wenn der String zugewiesen wird, hängt Bascom wieder ein Null-Byte hinten dran. Da dieses nicht mehr in Char_buffer(8) passt, wird die nächste Variable im SRAM überschrieben. So denn da eine ist.
Daher im Byte-Array sicherheitshalber ein Byte mehr anlegen
Dim Char_buffer(9) As Byte

peterfido
14.01.2010, 21:32
Stimmt natürlich. Bei Platzmangel besser die Bytes als Overlay definieren.