Replacestring im Modus 2 geht nicht mit FixStrings

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Replacestring im Modus 2 geht nicht mit FixStrings

Beitrag von hjbremer »

Diese Macke ist für mich ärgerlich

Betrifft nur Modus 2

Code: Alles auswählen

Structure Betrag
  ganz.s{12}
  zahl.s
EndStructure 

wert.Betrag

wert\ganz = "123,00"
ReplaceString(wert\ganz, ",", ".", 2) 
Debug wert\ganz

wert\ganz = ReplaceString(wert\ganz, ",", ".") 
Debug wert\ganz

ganzzahl.s{12} = "123,00"
ReplaceString(ganzzahl, ",", ".", 2) 
Debug ganzzahl

ganzzahl = ReplaceString(ganzzahl, ",", ".") 
Debug ganzzahl

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
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Möglicherweise ist das kein Bug.
Ich vermute mal, das liegt daran, dass Fixed String nicht null-terminiert sind (also mit Chr(0)).
Der Modus 2 ist aber auf eine Null angewiesen, denn der Modus 2 arbeitet intern anders als Modus 1.

Modus 2 kann nur deshalb eine sehr hohe Geschwinigkeit beim Ersetzen bieten, wenn Such- und Ersatzstring die gleiche Länge haben. Daher vermute ich, dass intern CompareMemoryString() und PeekS() benutzt werden; durch die fehlende Null-terminierung bei Fixed Strings wird einfach über das Stringende hinaus gelsen+geschrieben, was dann zu dem Bug führt.

Ist nur eine Vermutung meinersets.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten