[5.31 x86 Win] PeekS mit Längenangabe und Ascii Null-Term.

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
PeDre
Beiträge: 13
Registriert: 19.12.2014 11:22
Wohnort: Wien

[5.31 x86 Win] PeekS mit Längenangabe und Ascii Null-Term.

Beitrag von PeDre »

Ich habe möglicherweise einen Fehler bei der Verwendung von PeekS und ASCII-Zeichen gefunden.
Wenn man die Längenangabe bei PeekS verwendet, wird ein NULL-Terminierungszeichen mitzurückgegeben.
Bei dem Einbinden einer DLL ist mir das jetzt aufgefallen.
Hier ist ein konstruierter Beispielcode der den Fehler zeigt:

Code: Alles auswählen

EnableExplicit

Dim char.a(10)
Define text.s

char(0) = 65
char(1) = 66
char(2) = 67
char(3) = 68

Debug PeekS(@char(0), 20, #PB_Ascii) + "E" ; ERROR: Unicode executable "ABCD" -  Ascii executable "ABCDE"
Debug PeekS(@char(0), 8, #PB_Ascii) + "E" ; ERROR: Unicode executable "ABCD" -  Ascii executable "ABCDE"
Debug PeekS(@char(0), -1, #PB_Ascii) + "E" ; OK: Unicode executable "ABCDE" -  Ascii executable "ABCDE"

text = PeekS(@char(0), 20, #PB_Ascii)
text + "E"
Debug text ; OK: Unicode executable "ABCDE" -  Ascii executable "ABCDE"
PureBasic 5.31 (x86) und Windows XP SP3 32-Bit

Da ich mich mit PureBasic noch nicht gut auskenne, kann das auch eine Eigenheit von PureBasic sein, aber mir kommt es falsch vor.

Peter
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: [5.31 x86 Win] PeekS mit Längenangabe und Ascii Null-Ter

Beitrag von mhs »

Das scheint tatsächlich ein Fehler zu sein. Auch wenn man mit PokeS in einen Speicherbereich schreibt passier das gleiche.

Code: Alles auswählen

EnableExplicit

Define *Char
Define text.s

*Char = AllocateMemory(10)
PokeS(*Char, "ABCD", -1, #PB_Ascii)

Debug PeekS(*Char, 20, #PB_Ascii) + "E" ; ERROR: Unicode executable "ABCD" -  Ascii executable "ABCDE"
Debug PeekS(*Char, 8, #PB_Ascii) + "E" ; ERROR: Unicode executable "ABCD" -  Ascii executable "ABCDE"
Debug PeekS(*Char, -1, #PB_Ascii) + "E" ; OK: Unicode executable "ABCDE" -  Ascii executable "ABCDE"

text = PeekS(*Char, 20, #PB_Ascii)
text + "E"
Debug text ; OK: Unicode executable "ABCDE" -  Ascii executable "ABCDE"
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
PeDre
Beiträge: 13
Registriert: 19.12.2014 11:22
Wohnort: Wien

Re: [5.31 x86 Win] PeekS mit Längenangabe und Ascii Null-Ter

Beitrag von PeDre »

Ich habe das Beispiel etwas erweitert. Der Fehler tritt nur auf, wenn die Längenangabe größer als der Text ist, der ausgelesen wird.

Code: Alles auswählen

EnableExplicit

Dim char.a(10)
Define text.s

Debug "Ascii"

char(0) = 65
char(1) = 66
char(2) = 67
char(3) = 68

Debug PeekS(@char(0), 20, #PB_Ascii) + "E" ; ERROR: Unicode exe "ABCD" -  OK: Ascii exe "ABCDE"
Debug PeekS(@char(0), 8, #PB_Ascii) + "E" ; ERROR: Unicode exe "ABCD" -  OK: Ascii exe "ABCDE"
Debug PeekS(@char(0), 3, #PB_Ascii) + "E" ; OK: Unicode exe "ABCE" -  OK: Ascii exec "ABCE"
Debug PeekS(@char(0), -1, #PB_Ascii) + "E" ; OK: Unicode exe "ABCDE" -  OK: Ascii exe "ABCDE"

text = PeekS(@char(0), 20, #PB_Ascii)
text + "E"
Debug text ; OK: Unicode exe "ABCDE" -  OK: Ascii exe "ABCDE"

Debug ""
Debug "Unicode"

char(0) = 65 : char(1) = 0
char(2) = 66 : char(3) = 0
char(4) = 67 : char(5) = 0
char(6) = 68 : char(7) = 0

Debug PeekS(@char(0), 20, #PB_Unicode) + "E" ; OK: Unicode exe "ABCDE" -  ERROR: Ascii exe "ABCD"
Debug PeekS(@char(0), 8, #PB_Unicode) + "E" ; OK: Unicode exe "ABCDE" -  ERROR: Ascii exe "ABCD"
Debug PeekS(@char(0), 3, #PB_Unicode) + "E" ; OK: Unicode exe "ABCE" -  OK: Ascii exe "ABCE"
Debug PeekS(@char(0), -1, #PB_Unicode) + "E" ; OK: Unicode exe "ABCDE" -  OK: Ascii exe "ABCDE"

text = PeekS(@char(0), 20, #PB_Unicode)
text + "E"
Debug text ; OK: Unicode exe "ABCDE" -  OK: Ascii exe "ABCDE"
Peter
Antworten